我正在构建一个使用 EM 和 WebSockets 并涉及向订阅客户端广播数据的项目。
我想知道为什么人们更喜欢将 websocket 订阅到频道,如下所示:
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen {
sid = @channel.subscribe { |msg| ws.send msg }
@channel.push "#{sid} connected!"
ws.onmessage { |msg|
@channel.push "<#{sid}>: #{msg}"
}
ws.onclose {
@channel.unsubscribe(sid)
}
}
end
将每个 websocket 添加到数组中:
EM::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen {
puts "Websocket connection opened"
websocket_connections << ws
}
ws.onclose {
puts "Websocket connection closed"
websocket_connections.delete(ws)
}
end
并简单地迭代整个数组并ws.send msg
在适当的时候(或相反)进行类似的调用。
通道替代方案是否对 EventMachine 的整个非阻塞特性有更好的优化?(例如一次广播到一些订阅的套接字,然后继续其他的,而不是一次发送所有这些套接字)