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