我有一個存儲與一些其它的信息,我需要與他們相關聯的陣列中的每個插座連接的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中存儲套接字。