Tôi đã làm việc (chứng khoán) kịch bản từ nodeNodeJS | Cụm: Làm thế nào để gửi dữ liệu từ chủ tới tất cả hoặc một đứa trẻ/công nhân?
var cluster = require('cluster');
var http = require('http');
var numReqs = 0;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < 2; i++) {
var worker = cluster.fork();
worker.on('message', function(msg) {
if (msg.cmd && msg.cmd == 'notifyRequest') {
numReqs++;
}
});
}
setInterval(function() {
console.log("numReqs =", numReqs);
}, 1000);
} else {
// Worker processes have a http server.
http.Server(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
// Send message to master process
process.send({ cmd: 'notifyRequest' });
}).listen(8000);
}
Trong kịch bản trên, chúng tôi có thể gửi dữ liệu từ người lao động đến quá trình tổng thể một cách dễ dàng. Nhưng làm cách nào để gửi dữ liệu từ chủ tới nhân viên/công nhân? Với các ví dụ, nếu có thể.
Có nó hoạt động, cảm ơn bạn! Nói cách khác: trong khi forking công nhân tôi nên lưu trữ chúng trong một mảng. Và lặp lại mảng này để gửi dữ liệu đến mọi trẻ em. Là bất kỳ cách nào khác để gửi dữ liệu cho tất cả các công nhân mà không lưu trữ và lặp lại. – htonus
Nếu bạn không muốn lưu trữ các công nhân vào một mảng và lặp qua chúng để gửi tin nhắn, bạn có thể sử dụng một ổ cắm miền unix để truyền đạt thông điệp từ tổng thể đến các nhân viên. – alessioalex
Tôi cho rằng bạn có thể tạo một EventEmitter trong master, chúng phát ra một sự kiện bất cứ khi nào nhận được một tin nhắn. Sau khi tạo mỗi công nhân, bạn chỉ cần thêm một trình lắng nghe vào EventEmitter để gửi thông báo tới người lao động. Tất nhiên điều này vẫn còn thực hiện lưu trữ các tài liệu tham khảo của người nghe (do đó của người lao động quá) vào EventEmitter, nhưng hey, ít nhất bạn không cần phải nhìn vào nó – cheng81