集羣的NodeJS基於兒童的NodeJS進程。在子進程中,您可以通過IPC通道上的消息在父進程(集羣中的主進程)和子進程(集羣中的工作進程)之間發送數據。您可以使用的消息事件
var cluster = require('cluster');
var _ = require('lodash');
var http = require('http');
var workers = [];
var workerCount = 4;
if (cluster.isMaster) {
for (var i = 0; i < workerCount; i++) {
var worker = cluster.fork();
worker.on('message', function(msg) {
if (msg.task === 'sync') {
syncPlayerList(msg.data);
}
});
}
workers.push[worker];
} else {
var worker = new Worker();
process.on('message', function(msg) {
if (msg.task === 'sync') {
worker.playerList = msg.data;
}
});
}
function syncPlayerList (playerList) {
_.forEach(workers, function (worker) {
worker.send({
task: 'sync',
data: playerList
});
});
};
// worker class
function Worker() {
this.playerList = [];
}
Worker.prototype.sendSyncEvent = function() {
process.send({
task: 'sync',
data: this.playerList
})
};
這可能需要一些清理 –
感謝您的答覆做同樣的集羣,我已經嘗試過這種方法,但如果在玩家列表中的玩家登錄時每個工人直接更新,我有一些問題,如果我有兩個用戶在同一時間,它會閃耀。 – user2716281
你可以使用setTimeout來管理它 –