Ruby/Network/Ruby remoting

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск

Содержание

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