还记得我原来的帖子吗?
http://www.iteye.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 也不应该调用本地的呀