【发布时间】:2010-12-11 08:13:43
【问题描述】:
假设您有一个用户可以打开聊天室的网站。房间打开后,用户可以邀请其他人聊天。
我们还假设您想使用 WebSockets 与客户端进行通信。
在大多数服务器端 WebSocket 实现中,有一个简单的函数,例如 connection.broadcast(message),它将消息发送到所有连接的主机,但不是发起广播的主机。这是一个很棒的功能,因为您不需要为自己保留所有客户的列表来保持更新。聊天室示例的问题在于,在这种情况下,您不想将每条消息都广播给所有人,而只想广播给同一房间内的其他客户。
这让我有两个选择:
- 滚动我自己的
broadcastToRoom(room_id)函数,这反过来意味着跟踪所有客户和房间。 - 每次创建新房间时都会生成一个新的服务器实例(在新端口上)。
你会怎么做?
【问题讨论】:
-
我会立即回避为每个房间生成一个新服务器——这不是一个完整的 HTTP 服务器的设计目的,浪费资源,你的端口会很快填满,并且(不太重要)使得如果您决定稍后在那个方向上扩展某些东西,那么在房间之间进行数据通信就会变得更加困难
标签: javascript node.js websocket