我对事件驱动编程没有经验,我很难理解如何在faye-websocket之上编写一个类来隐藏我正在做的事情的复杂性。以下是我想要做的事情:
require 'faye/websocket'
require 'eventmachine'
require 'pp'
class Rubix
def initialize(url, options)
@response = {}
EM.run {
ws = Faye::WebSocket::Client.new(url, nil, options)
ws.on :open do |event|
...
end
ws.on :error do |event|
p [:error]
end
ws.on :message do |event|
resp = JSON.parse(event.data)
rid = resp['id']
response[rid] = resp
end
ws.on :close do |event|
p [:close, event.code, event.reason]
ws = nil
end
}
end
def call_qes(json_rpc, id)
ws.send(json_rpc)
while @response[id].nil?
sleep(1)
end
resp = @response.delete(id)
return resp
end
end
这是一种有效的方法吗?如果不是,我应该如何在这周围放一层抽象?
感谢。