如何知道所有集群工作人员何时启动?

时间:2017-03-25 12:42:00

标签: node.js multithreading node-cluster

我希望使用启动和停止方法来引导node cluster

我想写一些类似的东西:

myCluster.start().then(()=>{
    return myCluster.stop().then(()=>{console.log('smooth stop! nice.')});
}).catch(err=>{console.log('something went wrong')});

我怎样才能准确地告诉所有员工何时开始运作?

PS:它不一定是承诺。

1 个答案:

答案 0 :(得分:0)

一旦工人正在倾听,我设法通过从工人向主人发送消息来设计解决方案:

private sendMaster(pid: number, msg: ClusterMessage) {
    process.send({ pid, msg });
}

 self.server.listen(self.options.port, () => {
       self.sendMaster(process.pid, ClusterMessage.WORKER_LISTENING);
       resolve();
    }).on('error', () => {
       logError('Failed to start the server on port %O', self.options.port);
       reject();
});

在主代码中我会抓住这样的消息:

cluster.on('message', (worker, data) => {
    logInfo('Process %O listening on port %O', data.pid, self.options.port);
    self.startedWorkersCount++;
    if (self.startedWorkersCount === self.options.workers) {
       logInfo('Server ready');
       resolve(self.startedWorkersCount);
    }
 });

您可以更详细地检查我的代码here