素材牛VIP会员
nodejs cluster中server是由谁创建的
 sc***29  分类:Node.js  人气:879  回帖:3  发布于6年前 收藏

简要代码如下:
if(cluster.isMaster){

   cluster.fork();
   cluster.fork();

}else{

http.createServer(function(){
    ...
}).bind(8080);

}
想问一下,为什么server的创建要写在else里面?那意思不就是 在子进程中创建server,运行了两次,就是创建了2个server?而且都是绑定的同样的端口号?求指点。

 标签:node.js

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv5 码农
15***75 技术总监 6年前#1

由master进程创建并监听端口,当请求到达服务器master进程accept,并分发给worker进程

Lv3 码奴
yi***14 Linux系统工程师 6年前#2

我是这么理解的:
文件开始执行的时候
cluster.isMaster 是 true
然后进入 true 分支进行fork
每fork一次 新建一个线程 这个线程会从头开始执行文件
此时cluster.isMaster 是 false
进入 false 分支
执行创建 server
至于为什么监听的是同一个端口
实际上只有主线程监听这个端口
cluster 主线程会实现分发器
将请求分配给 这个端口上的其他线程

Lv5 码农
Y2***Y2 JS工程师 6年前#3

看listen方法源码

function listen(self, address, port, addressType, backlog, fd, exclusive) {
  exclusive = !!exclusive;

  if (!cluster) cluster = require('cluster');

  if (cluster.isMaster || exclusive) {
    self._listen2(address, port, addressType, backlog, fd);
    return;
  }

  cluster._getServer(self, {
    address: address,
    port: port,
    addressType: addressType,
    fd: fd,
    flags: 0
  }, cb);
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取