假设您有一个用户可以打开聊天室的网站。一旦房间打开,用户可以邀请其他人聊天。
让我们假装你想使用WebSockets与客户进行通信。
在大多数服务器端WebSocket实现中,有一个简单的函数,如connection.broadcast(message)
,它向所有连接的主机发送消息,但不向发起广播的主机发送消息。这是一个很棒的功能,因为您不需要为自己保留所有客户端的列表,以保持更新。聊天室示例的问题在于,在这种情况下,您不希望向每个人广播每条消息,而只是向同一房间中的其他客户端广播。
这让我有两个选择:
broadcastToRoom(room_id)
功能,这反过来意味着跟踪所有客户和房间。你会做什么?
答案 0 :(得分:5)
为每个房间滚动自己的broadcast
版本,保留该房间中的用户列表,如果有人在该房间内发送消息,只需将其发送给房间内的所有用户,根据您的协议,您可以排除邮件的原始发件人。
无论如何,每个房间都有一个用户列表,因此您只需将连接作为属性添加到用户对象。
但请记住,由于最近“发现”当前WebSocket规范的安全问题,Opera和Mozilla都已禁用对WebSocket的支持,直到发布新版本为止。因此,WebSockets需要更多时间才能获得广泛的可用性,并且需要将服务器需要更改为新版本。
详情请见:
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