2008-01-31
DRB时mixin的疑惑,是个bug?
还记得我原来的帖子吗?
http://www.javaeye.com/topic/156641
现在发现有个比较灵异的现象。
DRB+mixin时会有出乎我意料的行为。
server:
client:
module_a:
这3个文件在同一个目录时,先执行server.rb,再执行client.rb。结果是:
server.rb输出
I am server
clietn.rb输出
who am i
而不是我想要的 server.rb同时输出:
I am server
who am i
“info.sayHello2” 这句话居然是在本地调用的,而不是server端。
(或者更确切的说是client调到server,server再回调到client的sayHello2方法。因为假如把puts "who am i" 修改成 puts self, 输出是DRbObject)
如果我把client端的“include TestModule1”注释调,那么行为是正常的。
但是这不是我想要的,因为某些server端和client端公用的lib就是要被大家一起include的。
怎么说info.sayHello2 也不应该调用本地的呀
http://www.javaeye.com/topic/156641
现在发现有个比较灵异的现象。
DRB+mixin时会有出乎我意料的行为。
server:
require 'drb'
require 'module_a'
class ServerHello
include TestModule1
def sayHello
puts 'I am server'
end
end
DRb.start_service("druby://127.0.0.1:2222", ServerHello.new)
DRb.thread.join
client:
require 'drb' require 'module_a' include TestModule1 DRb.start_service info = DRbObject.new(nil, "druby://127.0.0.1:2222") info.sayHello() info.sayHello2
module_a:
require 'drb' module TestModule1 def sayHello2 puts "who am i" end end
这3个文件在同一个目录时,先执行server.rb,再执行client.rb。结果是:
server.rb输出
I am server
clietn.rb输出
who am i
而不是我想要的 server.rb同时输出:
I am server
who am i
“info.sayHello2” 这句话居然是在本地调用的,而不是server端。
(或者更确切的说是client调到server,server再回调到client的sayHello2方法。因为假如把puts "who am i" 修改成 puts self, 输出是DRbObject)
如果我把client端的“include TestModule1”注释调,那么行为是正常的。
但是这不是我想要的,因为某些server端和client端公用的lib就是要被大家一起include的。
怎么说info.sayHello2 也不应该调用本地的呀
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 8679 次

- 详细资料
搜索本博客
最新评论
-
DRB时mixin的疑惑,是个 ...
所谓的远程方法的调用其实就是对DRbObject的方法调用,真正的调用远程方法是 ...
-- by lllyq -
工作之余,想做一些技术方 ...
可以搞一个 搜索引擎优化;弄一个网站,挣一点小钱
-- by 锁上门睡觉 -
工作之余,想做一些技术方 ...
gigix 写道maxiaoxia 写道想了想,还是网络比较靠谱,也很有用,我的 ...
-- by maxiaoxia -
工作之余,想做一些技术方 ...
开发人工智能也挺好的哦 不过那个需要大量的人力和时间 你还不如在工作之余自己开 ...
-- by Imagination_Fly -
工作之余,想做一些技术方 ...
maxiaoxia 写道想了想,还是网络比较靠谱,也很有用,我的兴趣是游戏,不过 ...
-- by gigix






评论排行榜