我正在开发一个完全依赖于Socket.io的应用程序。众所周知,NodeJS默认只在一个核心上运行。现在我想在多个核心上扩展它。我发现难以使用PM2群集模式进行socketio工作。任何示例代码都会有所帮助。
我正在使用炮兵进行测试。当应用程序在单核上运行时,我得到响应,而它在集群中运行,响应将是NaN
答案 0 :(得分:0)
PM2文档说
确保您的应用程序是无状态的,这意味着没有本地数据 存储在进程中,例如会话/ websocket连接, 会话记忆和相关的。使用Redis,Mongo或其他数据库 在进程之间共享状态。
Socket.io不是无国籍的。
Kubernetes实现通过基于源IP路由到特定实例来解决状态问题。这仍然不是100%,因为某些来源可能会出现多个IP地址。我知道这不是PM2,但可以让您了解复杂性。
答案 1 :(得分:0)
答案 2 :(得分:0)
您需要使用节点服务器设置Redis。这是我设法使群集模式与Socket.io一起使用的方式
首先安装Redis。如果您使用的是Ubuntu,请点击以下链接:https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
然后:
npm i socket.io-redis
现在将Redis放置在您的节点服务器中
const redisAdapter = require('socket.io-redis')
global.io = require('socket.io')(server, { transports: [ 'websocket' ]})
io.adapter(redisAdapter({ host: 'localhost', port: 6379 }))
这就是我要使PM2集群模式与服务器中的socket.io一起使用所要做的一切。