WebSocket服务器的最佳实践是什么?
比方说,你有一个网站,用户可以打开聊天室。 一旦房间被打开,用户可以邀请他人聊天。
让我们也假装你想使用WebSockets进行与客户端的通信。 在大多数服务器端的WebSocket实现中,有一个简单的函数,比如connection.broadcast(message)
,它向所有连接的主机发送消息,而不是发起广播的消息。 这是一个很棒的function,因为您不需要为自己保留所有客户的列表,以保持更新。 聊天室的例子的问题是,在这种情况下,您不希望将每条消息广播给每个人,而只是向处于同一个房间的其他客户端广播。
这让我有两个select:
- 滚动我自己的
broadcastToRoom(room_id)
function,这反过来意味着跟踪所有客户和房间。 - 每当创build一个新房间时,产生一个服务器的新实例(在一个新的端口上)。
你会怎么做?
只要为每个房间推出自己的broadcast
版本,您就可以在该房间中保存一个用户列表,如果有人向该房间发送信息,则只需将其发送给房间内的所有用户,具体取决于您的协议即可排除邮件的原始发件人。
无论如何,您都有每个房间的用户列表,因此您可以将连接作为属性添加到用户对象。
但请记住,由于最近“发现”的安全问题与当前的WebSocket规范,Opera和Mozilla已经禁用了对WebSocket的支持,直到一个新版本发布。 所以WebSocket需要更多的时间才能有广泛的可用性和服务器需求改变到新版本。
详情请参阅:
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
http://blog.pusherapp.com/2010/12/9/it-s-not-websockets-it-s-your-broken-proxy