使用 faye-websocket 和 EventMachine,代码非常类似于 faye-websocket 的客户端示例:
require 'faye/websocket'
require 'eventmachine'
def setup_socket(url)
EM.run {
ws = Faye::WebSocket::Client.new(url)
ws.on :open do ... end
ws.on :message do ... end
ws.on :close do ... end
}
end
我希望能够并行地打开多个连接。 我不能简单地多次调用setup_socket
,因为执行不会退出EM.run
子句。 我尝试在单独的线程中多次运行setup_socket
,如下所示:
urls.each do |url|
Thread.new { setup_socket(url) }
end
但是它似乎并没有做任何事情,因为puts
语句没有输出。
我不限于使用faye-websocket,但是似乎大多数人都使用这个库。如果可能的话,我想避免使用多线程。我也不想失去随着时间推移进行更改的可能性(例如添加新的websocket)。因此,将URL的迭代放在EM.run
子句内部不是所需的,而是启动多个EMs会更有益。我在这里找到了一个通过EM以非常干净的方式启动多个服务器的示例。我正在寻找类似的东西。
如何同时连接到多个WebSocket?
def setup_sockets(urls); EM.run { urls.each { ... } }; end
。那样行不行? - Casper