深入浅出 Node.js 里关于集群一段代码的问题
在 249 页的自动重启的代码,master 程序的代码如下:
var fork = require('child_process').fork;
var ncpus = require('os').cpus();
var net = require('net');
var server = net.createServer();
server.listen(3000);
var workers = {};
var createWorker = function() {
var worker = fork('./worker.js');
worker.on('exit', function() {
console.log('Worker ' + worker.pid + ' exited.');
delete worker[worker.pid];
createWorker();
});
worker.send('server', server);
workers[worker.pid] = worker;
console.log('Created worker. pid: ' + worker.pid);
};
for (var i = 0; i < 1; i++) {
createWorker();
}
process.on('exit', function() {
for (var pid in workers) {
workers[pid].kill();
}
});
我的疑问是,这段代码中主程序也在监听端口,但是没有做出反应,如果请求交给主程序处理的时候,会一直没返回数据,这要怎么解决呢?
2 回复
cluster 模式意味着 只有主进程在侦听端口,子进程只负责处理,不会侦听端口的。流程是这样的,主进程侦听端口,收到消息会轮转分配给不同的子进程worker 处理,worker处理完后返回结果给主进程,再由主进程返回给客户端。 所以主进程是不会处理事务的
@hyj1991 但是书上这段代码是否有问题,比如我就开一个子进程,会出现下面的情况
没有数据返回,说明主程序处理了这个请求?