Я понимаю вашу цель трансляции всем рабочим процессам узла в кластере, хотя вы не можете отправлять компонент сокета как таковой, но есть обходной путь для этой цели. Попробую объяснить на примере:
Шаг 1. Если для действия клиента требуется широковещательная рассылка:
Child.js (Process that has been forked) :
socket.on("BROADCAST_TO_ALL_WORKERS", function (data)
{
process.send({cmd : 'BROADCAST_TO_ALL_WORKERS', message :data.message});
})
Шаг 2. На стороне создания кластера
Server.js (Place where cluster forking happens):
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
var worker = cluster.fork();
worker.on('message', function (data) {
if (data.cmd === "BROADCAST_TO_ALL_WORKERS") {
console.log(server_debug_prefix() + "Server Broadcast To All, Message : " + data.message + " , Reload : " + data.reload + " Player Id : " + data.player_id);
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].send({cmd : "BROADCAST_TO_WORKER", message : data.message});
});
}
});
}
cluster.on('exit', function (worker, code, signal) {
var newWorker = cluster.fork();
newWorker.on('message', function (data) {
console.log(data);
if (data.cmd === "BROADCAST_TO_ALL_WORKERS") {
console.log(data.cmd,data);
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].send({cmd : "BROADCAST_TO_WORKER", message : data.message});
});
}
});
});
}
else {
//Node Js App Entry
require("./Child.js");
}
Шаг 3. Трансляция в дочерний процесс —
-> Поместите это перед io.on("connection") в Child.js
process.on("message", function(data){
if(data.cmd === "BROADCAST_TO_WORKER"){
io.sockets.emit("SERVER_MESSAGE", { message: data.message, reload: data.reload, player_id : data.player_id });
}
});
Надеюсь, это поможет. Пожалуйста, дайте мне знать, если требуются дополнительные разъяснения.
19.08.2017
var
внутриfor
?worker
будет удерживать последнего разветвленного рабочего, а не каждого (особенно внутри обратного вызова события). Либо вы не заботитесь обо всех, и вы просто заключаете свой обратный вызов, либо держите всех рабочих в массиве. 21.12.2011child_process
, который, я думаю, открывает сокет для обработки межпроцессного взаимодействия. Вы должны сделать несколько тестов с реальными данными и посмотреть, как они работают. 14.09.2015