Ruby/Network/Ruby remoting
Материал из Wiki.crossplatform.ru
(Различия между версиями)
Версия 17:10, 26 мая 2010
Содержание |
Call remote server
require "drb" class Counter attr_reader:count def initialize @count = 0 end def increment @count += 1 end end counter = Counter.new DRb.start_service("druby://localhost:8888", counter) DRb.thread.join # accesses the Counter object that has been exported by the server: require "drb" DRb.start_service counter = DRbObject.new(nil, "druby://localhost:8888") 5.times do counter.increment puts counter.count end
multiple callers
require "drb" class Counter attr_reader:count def initialize @count = 0 end def increment @count += 1 end end class TrackedCounter < Counter attr_reader:name attr_reader:createdAt attr_reader:lastAccess def initialize(name) super() @name = name @createdAt = Time.now @lastAccess = @createdAt end end tracked = TrackedCounter.new("Tracked Counter") DRb.start_service("druby://localhost:8888", tracked) DRb.thread.join # accesses the tracked object that has been exported by the server: require "drb" DRb.start_service tracked = DRbObject.new(nil, "druby://localhost:8888") 5.times do tracked.increment puts "The count is #{tracked.count}" puts "The last access date is #{tracked.lastAccess}" end
Ruby based remoting
require "drb" class TestServer def add(*args) args.inject {|n,v| n + v} end end server = TestServer.new DRb.start_service("druby://localhost:9000", server) DRb.thread.join # Don"t exit just yet! require "drb" DRb.start_service() obj = DRbObject.new(nil, "druby://localhost:9000") # Now use obj puts "Sum is: #{obj.add(1, 2, 3)}"
Use DRb to start a service
require "drb" require "drb_observer" class Ticker include DRbObservable def initialize() Thread.new { run } end def run loop do price = 10 print "Current price: #{price}\n" notify_observers(Time.now, price) sleep 1 end end end ticker = Ticker.new() DRb.start_service("druby://localhost:9001", ticker) puts "Press [return] to exit." gets