PM2 集群模式是否在一个进程中处理 WebSocket?



我正在使用Node.js和 Socket.io 构建一个简单的聊天应用程序。开始使用 PM2 在不同的实例上扩展我的应用程序(目前出于测试目的,我在 Windows 操作系统上使用 4 个实例(。

在测试过程中,我注意到所有 websocket 流量都通过相同的实例 ID,但是如果我强制将 WebSocket 连接到另一个实例,那么我发送到该实例的所有消息都无法在其他现有 WebSocket 连接中查看,因为它们在不同的实例上运行。

假设我想使用 PM2 群集模式向所有连接的用户广播聊天消息。我怎样才能做到这一点?

我已经阅读了这个问题 https://github.com/Unitech/pm2/issues/1510 指出只要我只在 Socket.io 中使用 websocket 传输,就不会有任何问题。这是如何工作的?PM2 是否在内部处理所有 WebSocket 连接以始终指向同一进程?

为了在集群模式下使用socket.io,您需要使用 socket.io-redis 作为套接字适配器,以便所有用户每次尝试发出请求时都会返回到以前的服务器,否则,他们将收到 400 错误。

最新更新