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 - 最佳实践是啥?

Android最佳实践——深入浅出WebSocket协议

除了 syslog 之外,Linux 服务/守护程序文件记录最佳实践是啥? [关闭]

在 React 组件和服务之间进行通信的最佳实践是啥?

Mosquitto websockets 安全最佳实践

HA gearman 作业服务器的最佳实践是啥