使用 websockets 时,我应该为每个不同的任务打开一个新的 websocket 连接吗?还是我应该在一个连接中完成所有事情?

Posted

技术标签:

【中文标题】使用 websockets 时,我应该为每个不同的任务打开一个新的 websocket 连接吗?还是我应该在一个连接中完成所有事情?【英文标题】:When working with websockets should I open a new websocket connection for every different task? Or should I do everything within one connection? 【发布时间】:2021-07-22 15:11:58 【问题描述】:

我在我的 react 应用程序中使用 socket.io,并且我有一个后端 expressJS 服务器。我的问题是,我应该为每个功能分别打开一个新的 websocket 连接,还是应该只使用一个连接来处理多个事情?例如,我有一个聊天组件,用户可以在其中相互发送聊天消息,但我还想为通知侦听器和在线状态创建一个 Web 套接字。我想知道是不为此打开新连接并将事物分开,还是只建立一个连接(这有望节省服务器资源)并对那个连接进行不同的调用?

【问题讨论】:

【参考方案1】:

Socket.IO 具有namespaces 的概念,您可以使用它来区分应用程序的不同方面。

在内部,它实际上会为所有命名空间共享一个 WebSocket(假设它不使用 HTTP 长轮询)。

除了让您的服务器执行更多工作之外,新的 WebSocket 没有任何问题,因为还有另一个套接字要处理和跟踪。

【讨论】:

那么也许我会在一个连接中完成所有事情。我看到命名空间像房间一样工作,我已经在我的聊天中使用了,所以我将为不同的任务使用不同的“发射”。感谢您的回答! @ms3300 我链接的文档已经展示了通过使用io.of('/namespace'),您基本上拥有一个完全独立的“socket IO”,除了它使用多路复用。 (据我所知,您不能在命名空间中使用命名空间?)。不要忘记将最有帮助的答案标记为解决方案。 没问题!再次感谢您的帮助!

以上是关于使用 websockets 时,我应该为每个不同的任务打开一个新的 websocket 连接吗?还是我应该在一个连接中完成所有事情?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 1.5:多个 WebSocket 连接

使用 websocket 进行节点集群

通过 Socket.IO 的 WebSocket 设计模式

客户端-服务器 websocket 通信

Websockets:所有用户一个通道还是每个用户一个通道?

做代理时 Nginx 中的 Websocket 升级标头问题