【问题标题】:Does master cluster accept requests when child workers are busy当子工作人员忙时,主集群是否接受请求
【发布时间】:2016-12-01 02:16:04
【问题描述】:

我正在使用cluster 模块来创建子进程/工作者。这是我的简单设置:

if (cluster.isMaster) {
    cluster.fork();
} else {
    http.createServer((req, res) => {
        if (cluster.isMaster) {
            res.writeHead(200);
            res.end('hello from master\n');
        } else {
            while (true) {
                console.log('from child');
            }
        }
    }).listen(8484);
}

我想知道,如果子进程忙,主进程是否处理请求。所以我运行了上面的代码并从浏览器发出了两个请求,期望第一个会使子进程忙,而第二个进程将由主集群处理。但我从来没有收到hello from master 发送给客户。

如果子进程很忙,主进程/工作者/集群是否会处理请求?如果是这样,为什么我的实验没有成功?

【问题讨论】:

  • 您的问题是否与您的 if/else 语句有关?当它到达 else 时,cluster.isMaster 不正确,所以你的第一个嵌套 if 永远不会通过。

标签: javascript node.js


【解决方案1】:

我有理由确信,主人唯一的工作就是管理孩子。你的实验没有成功,因为你的服务器代码只是在一个子进程中设置,所以所有针对它们的请求都将针对子进程

【讨论】:

  • 谢谢,我尝试重写脚本,以便在主集群和子集群中执行createServer,我收到错误Error: bind EADDRINUSE null:8484。所以据我了解,同一个端口不能用于多个listen。但是,如果我使用 4 个子进程并且它们都执行相同的代码,那么在这种情况下它是如何工作的?
  • 因为正如我所说,集群主节点应该只管理子节点。它代理并公开子项公开的声明端口,以显示为一个接口。
  • 好的,谢谢,所以据我所知,我最好将子集群代码分开并像这样if (cluster.isMaster) { cluster.fork(); } else { require('./child'); }。有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 2018-12-15
  • 1970-01-01
  • 2018-12-22
  • 2017-01-23
相关资源
最近更新 更多