node-ipc cluster仅使用1个worker

时间:2016-09-07 14:52:44

标签: javascript node.js cluster-computing ipc

我在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);

0 个答案:

没有答案