我有一个存储与一些其它的信息,我需要与他们相关联的阵列中的每个插座连接的NodeJS TCP服务器:存储插槽与多进程
var clients = [];
net.createServer(sslOptions, function (_socket) {
_socket.name = 'someName';
_sockect.foo = 'bar';
clients.push(_socket);
}
服务器遍历数组客户对于一些商业逻辑的东西来说很常见。有时一个条件触发,我需要断开这些插槽中的一个:
if(condition) {
for(let x = 0; x < clients.length; x++) {
if(clients[x].name == 'someName') {
clients[x].disconnect();
clients.splice(x, 1);
return;
}
}
}
有2个东西,我担心这个做法。如果我决定使用PM2 clusters或任何其他Nodejs进程管理器来复制我的应用以实现负载均衡,那么不同进程如何共享同一个阵列客户端?而如果一个进程正在迭代数组而另一个进程正在删除一个索引,会发生什么情况呢?可能会有竞争条件最终导致错误的断开和删除。
当然,解决方案是使用类似于原子DB的东西,但我不知道如何在Mongo或Redis中存储套接字。