Rinda Primer

[1] Launch a Rinda TupleSpace

require 'rinda/tuplespace'
DRb.start_service 'druby://:12345', Rinda::TupleSpace.new
p DRb.uri
DRb.thread.join

Output provides URI of which machine/port the TupleSpace communicates with.

[2] Start a server - in this example, it doubles input value

require 'rinda/tuplespace'
DRb.start_service 
dro = DRbObject.new_with_uri 'druby://mach:12345'
tsp = Rinda::TupleSpaceProxy.new dro
loop {
  name, val = tsp.take ["q", nil]
  tsp.write ["a", val, val*2]
}

[3] Finally throw in queries, for example

require 'rinda/tuplespace'
DRb.start_service 
dro = DRbObject.new_with_uri 'druby://mach:12345'
tsp = Rinda::TupleSpaceProxy.new dro
[2,3,5,7,11,13].map {|n|
  tsp.write ["q", n]
  p tsp.take(["a", nil, nil])
}

Sample output

["a", 7, 14]
["a", 11, 22]
["a", 13, 26]
["a", 2, 4]
["a", 3, 6]
["a", 5, 10]

Notice an interesting output order.

Tips. How to kill a process: ctrl-c (unix), ctrl-break (Windows)