Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Object
A RingServer allows a Rinda::TupleSpace to be located via UDP broadcasts. Service location uses the following steps:
A RingServer begins listening on the broadcast UDP address.
A RingFinger sends a UDP packet containing the DRb URI where it will listen for a reply.
The RingServer receives the UDP packet and connects back to the provided DRb URI with the DRb service.
Pulls lookup tuples out of the TupleSpace and sends their DRb object the address of the local TupleSpace.
# File rinda/ring.rb, line 82 def do_reply tuple = @ts.take([:lookup_ring, DRbObject]) Thread.new { tuple[1].call(@ts) rescue nil} rescue end
Extracts the response URI from msg
and adds it to TupleSpace where it will be picked up by
reply_service
for notification.
# File rinda/ring.rb, line 57 def do_write(msg) Thread.new do begin tuple, sec = Marshal.load(msg) @ts.write(tuple, sec) rescue end end end
Creates a thread that notifies waiting clients from the TupleSpace.
# File rinda/ring.rb, line 70 def reply_service Thread.new do loop do do_reply end end end
Creates a thread that picks up UDP packets and passes them to #do_write for decoding.
# File rinda/ring.rb, line 44 def write_service Thread.new do loop do msg = @soc.recv(1024) do_write(msg) end end end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.