[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

question DRb class definition share or not share

uchenwc

10/11/2007 3:41:00 PM

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

2 Answers

Eric Hodel

10/11/2007 4:11:00 PM

0


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.
>
> 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.

> # 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



uchenwc

10/11/2007 5:27:00 PM

0

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.
>

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!