Maintenance of Ruby 2.0.0 ended on February 24, 2016. 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