类 DRb::ExtServManager
属性
uri[RW]
公共类方法
command() 点击切换源
# File lib/drb/extservm.rb, line 17 def self.command @@command end
command=(cmd) 点击切换源
# File lib/drb/extservm.rb, line 21 def self.command=(cmd) @@command = cmd end
new() 点击切换源
调用超类方法
MonitorMixin::new
# File lib/drb/extservm.rb, line 25 def initialize super() @cond = new_cond @servers = {} @waiting = [] @queue = Thread::Queue.new @thread = invoke_thread @uri = nil end
公共实例方法
register(name, ro) 点击切换源
# File lib/drb/extservm.rb, line 47 def register(name, ro) synchronize do @servers[name] = ro @cond.signal end self end
别名:regist
service(name) 点击切换源
# File lib/drb/extservm.rb, line 36 def service(name) synchronize do while true server = @servers[name] return server if server && server.alive? # server may be `false' invoke_service(name) @cond.wait end end end
unregister(name) 点击切换源
# File lib/drb/extservm.rb, line 56 def unregister(name) synchronize do @servers.delete(name) end end
别名:unregist
私有实例方法
invoke_service(name) 点击切换源
# File lib/drb/extservm.rb, line 72 def invoke_service(name) @queue.push(name) end
invoke_service_command(name, command) 点击切换源
# File lib/drb/extservm.rb, line 76 def invoke_service_command(name, command) raise "invalid command. name: #{name}" unless command synchronize do return if @servers.include?(name) @servers[name] = false end uri = @uri || DRb.uri if command.respond_to? :to_ary command = command.to_ary + [uri, name] pid = spawn(*command) else pid = spawn("#{command} #{uri} #{name}") end th = Process.detach(pid) th[:drb_service] = name th end
invoke_thread() 点击切换源
# File lib/drb/extservm.rb, line 64 def invoke_thread Thread.new do while name = @queue.pop invoke_service_command(name, @@command[name]) end end end