我有一个节点应用程序,它现在在单核处理器上运行,但很快我将使用集群并将 socket.io 与 redis 同步用于多个 node.js 进程。我将连接的客户端(socket.io 的套接字对象)存储在内存中,例如
io.sockets.on('connection',function(socket){
clients[someId][someId2] = socket;
})
所以所有的套接字都在客户端对象中。但是这个客户端对象对每个 node.js 进程都有不同的套接字(因为它们有单独的内存)。
现在如果我clients[someId][someId2].emit('something')
来自 node.js 进程 (1) 并且如果那client[someId][someId2]
实际上是在 node.js 进程(2) 中,我有问题。
那么如何处理这个问题,如何在所有 node.js 进程之间共享一个公共对象?我对集群很陌生,到目前为止还没有合作过。
编辑:
我刚刚了解到,通过集群分叉的工作人员无法共享,解决这个问题的有效解决方案是创建每个具有不同端口的 node.js 进程,并与负载均衡器(如 HAProxy)建立粘性会话。但是考虑一下,client1连接到 nodejsP1 并且在 clientsOfP1[client1] = socket; 和 client2 到 nodeJsP2 ,现在如果 Client1 的会话想要做一些类似 clientsOfP2[client2].emit 的事情,它必须使用像 ZeroMQ 这样的 IPC 与 P2 通信。这对生产有好处吗?