From: Masatoshi SEKI Date: 2001-05-16T03:07:25+09:00 Subject: [ruby-talk:15196] Re: SV: DRuby/Rinda/TupleSpace Dokumentation Hi > The problems I have with DRuby are > > .) That there is no "name service". Each object needs it's own server on a > different port. * dRuby is not provide "name service". * Each DRbServer needs different port, Not each object. > .) That (if I understood correctly) the server works on an _instance_ of an > object, not on a class. This means that the member variable of the object > are shared between the different clients. * DRbServer has a front-object. It's a front-gate of the Distributed System. * DRbServer works on many objects. -- ns.rb -- # Simple NameService. require 'drb/drb' DRb.start_service(ARGV.shift, {}) puts DRb.uri puts '[enter] to exit' gets -- q.rb -- # Queue factory require 'thread' require 'drb/drb' require 'drb/timeridconv' class Queue include DRbUndumped end class QueueFactory include DRbUndumped def new SizedQueue.new(4) end end begin name_service_uri = ARGV.shift || raise rescue puts "usage : #{$0} " exit 1 end DRb.install_id_conv(TimerIdConv.new) DRb.start_service ns = DRbObject.new(nil, name_service_uri) # factory = DRbObject.new(Queue) factory = QueueFactory.new ns['queue'] = factory puts '[enter] to exit' gets -- qi.rb -- # Create a queue, and regist to NameService require 'drb/drb' begin name_service_uri = ARGV.shift || raise queue_name = ARGV.shift || raise rescue puts "usage : #{$0} " exit 1 end DRb.start_service ns = DRbObject.new(nil, name_service_uri) p ns.size queue_factory = ns['queue'] queue = queue_factory.new p queue ns[queue_name] = queue 10.times do |n| queue.push n end queue.push nil -- qo.rb -- # Consumer. delete queue from NameService require 'drb/drb' begin name_service_uri = ARGV.shift || raise queue_name = ARGV.shift || raise rescue puts "usage : #{$0} " exit 1 end DRb.start_service ns = DRbObject.new(nil, name_service_uri) queue = ns[queue_name] while elem = queue.pop puts elem + elem end ns[queue_name] = nil -- How to play HOST A % ruby ns.rb druby://hostA:12345 HOST B % ruby q.rb druby://hostA:12345 HOST C % ruby qi.rb druby://hostA:12345 test_queue_name HOST D % ruby qo.rb druby://hostA:12345 test_queue_name Seki.