From: Christopher Aldridge Date: 2005-08-15T08:01:21+09:00 Subject: Re: drb server using file/tail to read file, and update client? Joel, FYI -- This worked GREAT! :-) Thank you!!!!!!!!!! On 8/10/05, Christopher Aldridge wrote: > Got it Joel. > > I'll give it a try tomorrow morning. > > Thanks again! :-) > > On 8/9/05, Joel VanderWerf wrote: > > Joel VanderWerf wrote: > > > Ryan Leavengood wrote: > > > > > >>Christopher Aldridge said: > > >> > > >> > > >>>Any suggestions or am I doing it the only way it can be done? > > >> > > >> > > >>If I understand your problem correctly, the issue is that you now have to > > >>constantly poll the server to see if there are more lines, when really > > >>what you want is to have the server tell the clients of the new lines. > > >> > > >>So your options are either to code the clients so they also have a DRb > > >>server, which the server connects to when outputting lines from the log > > >>file, or possible to use Rinda and a Tuplespace. > > > > > > > > > IIRC, the client can also call a method with a block. The block is > > > undumped, so it remains on the client side, with a proxy on the server > > > side. When the server's implementation of the method yields to the > > > block, it calls the code on the client side. DRb is sooo elegant! > > > > > > An example of that idea is embedded in a little distributed chat server > > > example that comes with my foxtails project, using distributed observers > > > wired up to fox gui widgets. But it's probably easier to code this up > > > from scratch, once you know that DRb supports distributed block yields. > > > > > > > Here is an example of using callbacks by yielding from the server: > > > > ==== svr.rb ==== > > require 'drb' > > > > $callback = nil > > > > class C > > def foo > > 3.times do |i| > > yield i > > end > > end > > > > def bar(&pr) > > $callback = pr > > end > > end > > > > obj = C.new > > > > DRb.start_service('druby://:22337', obj) > > > > begin > > loop do > > $callback.call if $callback > > sleep 1 > > end > > rescue DRb::DRbConnError > > puts "client is gone" > > end > > ========= > > > > ==== clnt.rb ==== > > require 'drb' > > > > DRb.start_service() > > obj = DRbObject.new_with_uri('druby://:22337') > > > > obj.foo do |i| > > p i > > end > > > > obj.bar do > > puts "Got callback!" > > end > > > > puts "press return to quit" > > gets > > ======== > > > > output: > > > > 0 > > 1 > > 2 > > press return to quit > > Got callback! > > Got callback! > > Got callback! > > Got callback! > > > > -- > > vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407 > > > > >