I'm finally getting around to playing with DRb and I have some general questions.
Let's say I would like to share a Hash with a whole slew of computers. Clients should be able to load objects into the Hash and examine the data the Hash contains.
Here's the trivial implementation. First the server:
#!/usr/local/bin/ruby -w
# hash_server.rb
require "drb"
data = {:server => "data"}
DRb.start_service("druby://localhost:61676", data)
DRb.thread.join
__END__
Then the client:
#!/usr/local/bin/ruby -w
require "drb"
DRb.start_service
data = DRbObject.new(nil, "druby://localhost:61676")
### Whatever operations go here... ###
data[:client] = "more data"
data.each { |(from, data)| puts "#{from} => #{data}"}
__END__
Now I'll list some some general questions and hope some guru feels like enlightening me:
1. This is mostly a curiosity, but how does this work, really?
I guess I half expected that each() call not to work because of the block, which can't be marshaled, obviously. Was the Hash marshaled down to the client and each() called there? How often does this transference happen, every method call? I'm trying to decide how up to date my data will be, at any given time, mainly.
Any details you can provide would be helpful. As you can see, I'm still trying to get my head around all of this.
2. How does the use of DRbUndumped change the answer(s) to #1.
3. I *assume* the above is not very (thread) safe. Should I wrap the Hash in class with modify and read methods, then synchronize their work? Again, I want 40 computers to be able to trade data in and out of here all at once.
4. How does Rinda::TupleSpace relate to what I'm trying to do here?
5. I've poked around in the documents on ruby-doc.org, read the Chad Fowler article, and read the short sections in the Pickaxe2. Any good DRb documentation I'm missing?
Thanks much!
James Edward Gray II