PM2 集群模式是否在一个进程中处理 WebSockets?
Does PM2 Cluster Mode handle WebSockets in one single process?
我正在使用 Node.js 和 Socket.io 构建一个简单的聊天应用程序。开始使用 PM2 在不同实例上扩展我的应用程序(目前出于测试目的,我在 Windows OS 上使用 4 个实例)。
在测试期间,我注意到所有 websocket 流量都通过相同的实例 ID,但是如果我强制 WebSocket 连接到另一个实例,那么我发送到那个实例的所有消息都无法在其他现有的 WebSocket 连接,因为它们 运行 在不同的实例上。
假设我想使用 PM2 集群模式向所有连接的用户广播一条聊天消息。我怎样才能做到这一点?
我读过这个问题 https://github.com/Unitech/pm2/issues/1510 指出只要我在 Socket.io 中只使用 websocket 传输就不会有任何问题。这是如何运作的? PM2 是否在内部处理所有 WebSocket 连接以始终指向同一进程?
为了在集群模式下使用 socket.io
,您需要使用 socket.io-redis 作为套接字适配器,这样所有用户每次尝试发出请求时都会返回到他们之前的服务器,否则,他们会得到 400 个错误。
我正在使用 Node.js 和 Socket.io 构建一个简单的聊天应用程序。开始使用 PM2 在不同实例上扩展我的应用程序(目前出于测试目的,我在 Windows OS 上使用 4 个实例)。
在测试期间,我注意到所有 websocket 流量都通过相同的实例 ID,但是如果我强制 WebSocket 连接到另一个实例,那么我发送到那个实例的所有消息都无法在其他现有的 WebSocket 连接,因为它们 运行 在不同的实例上。
假设我想使用 PM2 集群模式向所有连接的用户广播一条聊天消息。我怎样才能做到这一点?
我读过这个问题 https://github.com/Unitech/pm2/issues/1510 指出只要我在 Socket.io 中只使用 websocket 传输就不会有任何问题。这是如何运作的? PM2 是否在内部处理所有 WebSocket 连接以始终指向同一进程?
为了在集群模式下使用 socket.io
,您需要使用 socket.io-redis 作为套接字适配器,这样所有用户每次尝试发出请求时都会返回到他们之前的服务器,否则,他们会得到 400 个错误。