#javascript #node.js #arrays #sockets #cluster-computing
Вопрос:
У меня есть сервер сокетов tcp, написанный на узле js. У меня есть массив, объявленный глобально, в котором я хочу хранить все клиенты сокетов. Проблема в том, что, поскольку я работаю с кластером узлов, массив не хранит данные и продолжает сбрасываться всякий раз, когда новые данные поступают от любого клиента. Ниже приведен мой код
const cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var sockets = [];
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i ) {
cluster.fork();
}
cluster.on('death', function(worker) {
// console.log('worker ' worker.pid ' died');
cluster.fork();
});
} else {
net.createServer(function(socket) {
// console.log('received connection...');
socket.on("error", function(err) {
// console.log("socket error: ")
// console.log(err.stack);
socket.destroy();
});
socket.on('data', function(data) {
sockets.push(socket);
console.log("existing socket clients" sockets);
});
});
}
массив сокетов хранит только текущую запись данных, а не существующие клиенты сокетов. Но если я напишу этот код без кластера, то он сохранит данные сокетов в массиве, и код будет работать нормально
var sockets = [];
net.createServer(function(socket) {
// console.log('received connection...');
socket.on("error", function(err) {
// console.log("socket error: ")
// console.log(err.stack);
socket.destroy();
});
socket.on('data', function(data) {
sockets.push(socket);
console.log("existing socket clients" sockets);
});
});
Заранее спасибо