我在Windows 8.1上的nodejs中使用了node-ipc和cluster,并成功集群了一个ipc服务器并创建了多个进程,就像我有CPU一样(在我的情况下为4),它们共享相同的端口和id .

我将多个客户端连接到此群集服务器,并期望主进程将任务委派给免费的工作程序 . 但是这不起作用,主人总是选择同一个 Worker .

我检查过并且所有工作进程都在运行 . 我怎样才能让主人每次选择最不忙的 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);