如何知道所有集群工作人员何时启动?
How to know when all cluster workers are up?
我正在寻找 bootstrap 具有启动和停止方法的 node cluster。
我想写类似的东西:
myCluster.start().then(()=>{
return myCluster.stop().then(()=>{console.log('smooth stop! nice.')});
}).catch(err=>{console.log('something went wrong')});
我如何才能准确判断我所有的工人何时 运行?
PS: 不一定要有承诺。
我设法设计了一个解决方案,方法是在工作人员正在收听时立即将消息从工作人员发送给主人:
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
我正在寻找 bootstrap 具有启动和停止方法的 node cluster。
我想写类似的东西:
myCluster.start().then(()=>{
return myCluster.stop().then(()=>{console.log('smooth stop! nice.')});
}).catch(err=>{console.log('something went wrong')});
我如何才能准确判断我所有的工人何时 运行?
PS: 不一定要有承诺。
我设法设计了一个解决方案,方法是在工作人员正在收听时立即将消息从工作人员发送给主人:
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