J
James Edward Gray II
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
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