我有一点代码:
require 'em-synchrony'
require 'em-synchrony/em-hiredis'
EventMachine.synchrony do
redis = EventMachine::Hiredis::Client.connect
puts redis.class.name
redis.set('a', 'foo')
puts redis.get('a') == 'foo' ## should be 'true'
puts redis.get('c').nil? ## should be 'true'
EM.stop
end
如果将其存储在
/tmp/reddy.rb
的文件系统中,则执行以下操作:$ ruby /tmp/reddy.rb
EventMachine::Hiredis::Client
false
false
在这两种情况下都返回aDefaultDeferrable。稍加修改
puts EM::Synchrony.sync( redis.get('a') )
按预期返回
'foo'
。现在,真正让我困惑的是,如果你看一下em-synchrony/em-hiredis
我包括你会发现em::hiredis::client很短:class Client
def self.connect(host = 'localhost', port = 6379)
conn = new(host, port)
EM::Synchrony.sync conn.connect
conn
end
alias :old_method_missing :method_missing
def method_missing(sym, *args)
EM::Synchrony.sync old_method_missing(sym, *args)
end
end
也就是说,应该已经调用了em::synchrony.sync,但似乎没有调用。我忽略了什么?为什么所列出的代码位的行为不像em synchrony文档所建议的那样?
我在用
EM-同步-1.0.0
事件机器-0.12.10
EM-HIREDIS-0.1.0公司
Ruby1.9.3p0(2011-10-30版本33570)[i686Linux]
我知道redis-rb但更喜欢
em-hiredis
因为它是pub/sub实现。 最佳答案
结果,em synchrony没有正确地给em hiredis打补丁。也就是说,您看到的客户机定义不存在于当前版本的em synchrony中,只存在于开发头中。
关于ruby - 为什么这个EventMachine Synchrony hiredis示例返回DefaultDefferable而不是请求中的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8737652/