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