【发布时间】:2012-08-25 17:04:33
【问题描述】:
我正在构建一个使用 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 的整个非阻塞特性进行了更好的优化? (例如,一次广播到一些订阅的套接字,然后继续其他的,而不是一次发送所有这些套接字)
【问题讨论】:
标签: ruby websocket eventmachine