我在windows 8.1上的nodejs中使用了node-ipc和cluster,并成功集群了一个ipc服务器并创建了多个进程,就像我有CPU一样(在我的情况下为4),所有进程都共享相同的端口和id。
我正在将多个客户端连接到此群集服务器,并且我希望主进程将任务委派给免费的worker。但是这不起作用,主人总是选择同一个工人。
我检查过并且所有工作进程都在运行。我怎样才能让主人每次都选择最不忙的工人?
以下是服务器代码
var os = require('os');
var numCPUs = os.cpus().length;
var cluster = require('cluster');
var ipc = require('node-ipc');
if (cluster.isMaster) {
console.log("I am master, launching workers");
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
console.log("worker " + i + " launched");
}
} else {
ipc.config.id = 'worldserver';
ipc.config.retry= 1500;
ipc.config.silent = true;
console.log(`I am worker #${cluster.worker.id}`, process.pid);
ipc.serve(
function(){
ipc.server.on('sayhello', function(data,socket) {
console.log(`I am worker #${cluster.worker.id}`, process.pid);
ipc.server.emit(
socket,
'message',
'hello'
);
}
);
ipc.server.on('error', function(e) {
console.log('IPC ERROR!!', e);
});
});
ipc.server.start();
}
这是客户端代码
var ipc=require('node-ipc');
ipc.config.id = 'hello';
ipc.config.retry= 1500;
ipc.config.silent = true;
setInterval(function() {
ipc.connectTo(
'worldserver',
function(){
console.log("sending something");
ipc.of.worldserver.emit(
'sayhello',
"true"
);
ipc.of.worldserver.on(
'message',
function(data){
console.log('I got this message from the server:');
console.log(data);
}
);
}
);
}, 20);