WebSocket 服务器的最佳实践是啥?
Posted
技术标签:
【中文标题】WebSocket 服务器的最佳实践是啥?【英文标题】:What is the best practice for WebSocket server(s)?WebSocket 服务器的最佳实践是什么? 【发布时间】:2010-12-11 08:13:43 【问题描述】:假设您有一个用户可以打开聊天室的网站。房间打开后,用户可以邀请其他人聊天。
我们还假设您想使用 WebSockets 与客户端进行通信。
在大多数服务器端 WebSocket 实现中,有一个简单的函数,例如 connection.broadcast(message)
,它将消息发送到所有连接的主机,但不是发起广播的主机。这是一个很棒的功能,因为您不需要为自己保留所有客户的列表来保持更新。聊天室示例的问题在于,在这种情况下,您不想将每条消息都广播给所有人,而只想广播给同一房间内的其他客户。
这让我有两个选择:
滚动我自己的broadcastToRoom(room_id)
函数,这反过来意味着跟踪所有客户和房间。
每次创建新房间时都会生成一个新的服务器实例(在新端口上)。
你会怎么做?
【问题讨论】:
我会立即回避为每个房间生成一个新服务器——这不是一个完整的 HTTP 服务器的设计目的,浪费资源,你的端口会很快填满,并且(不太重要)使得如果您决定稍后在那个方向上扩展某些东西,那么在房间之间进行数据通信就会变得更加困难 【参考方案1】:只需为每个房间滚动您自己的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
【讨论】:
2017 年更新:我相信 Mozilla 现在支持,我们只支持 Opera 和非常旧的 IE以上是关于WebSocket 服务器的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章
MVC 验证 - 使用服务层保持 DRY - 最佳实践是啥?