深入浅出 Node.js 里关于集群一段代码的问题
发布于 2 年前 作者 zhuscat 1786 次浏览 来自 问答

在 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 但是书上这段代码是否有问题,比如我就开一个子进程,会出现下面的情况

5ABFF9B5-6249-4B7F-8584-2056E930AF24.png

没有数据返回,说明主程序处理了这个请求?

回到顶部