Question DRb class definition share or not share

Just go through ruby cookbook & only tutorial for any DRb stuff. But I
need help explain below example that I don't understand why DRbUndump
is not needed. On some of the samples, I see class definition is
defined in a separate file and was 'require' by both client & server.
But in this case, the class definition is embedded in server side
code.

The below code works. I would think variable 'ro' in client represent
a proxy. So on the server side, the class definiton probably need to
include DRbUndump. Can anyone explain to my confusion?

# client
require 'drb'
DRb.start_service
ro = DRbObject.new(nil, 'druby://localhost:7777')
print ro.songname

#server
#!/usr/local/bin/ruby
require 'drb'

class SongNameServer
    def initialize(str)
        @filename = str
    end
    def songname
        f = File.new(@filename)
        return f.readline
    end
end

DRb.start_service("druby://localhost:7777", SongNameServer.new("/tmp/
songname"))
puts DRb.uri

DRb.thread.join

Just go through ruby cookbook & only tutorial for any DRb stuff. But I
need help explain below example that I don't understand why DRbUndump
is not needed. On some of the samples, I see class definition is
defined in a separate file and was 'require' by both client & server.
But in this case, the class definition is embedded in server side
code.

The below code works. I would think variable 'ro' in client represent
a proxy. So on the server side, the class definiton probably need to
include DRbUndump. Can anyone explain to my confusion?

This is exactly right. DRbUndumped forces the creation of a proxy object on the client.

···

On Oct 11, 2007, at 08:45 , Jack wrote:

# client
require 'drb'
DRb.start_service
ro = DRbObject.new(nil, 'druby://localhost:7777')
print ro.songname

#server
#!/usr/local/bin/ruby
require 'drb'

class SongNameServer
    def initialize(str)
        @filename = str
    end
    def songname
        f = File.new(@filename)
        return f.readline
    end
end

DRb.start_service("druby://localhost:7777", SongNameServer.new("/tmp/
songname"))
puts DRb.uri

DRb.thread.join

--
Poor workers blame their tools. Good workers build better tools. The
best workers get their tools to do the work for them. -- Syndicate Wars

Thanks Eric, it is much clear to me now! The recipe 16.10 of ruby
cookbook include class definition on both client and server that was
not actually required on client side. From other examples, it is clear
now when I need it. I think I need to watch out the parameters pass to
the method.

Your online tutorial also very helpful, BTW, thanks again!

···

On Oct 11, 12:10 pm, Eric Hodel <drbr...@segment7.net> wrote:

On Oct 11, 2007, at 08:45 , Jack wrote:

> Just go through ruby cookbook & only tutorial for any DRb stuff. But I
> need help explain below example that I don't understand why DRbUndump
> is not needed. On some of the samples, I see class definition is
> defined in a separate file and was 'require' by both client & server.
> But in this case, the class definition is embedded in server side
> code.

This is exactly right. DRbUndumped forces the creation of a proxy
object on the client.