node.js集群模块如何允许多个子进程在同一端口上侦听?

时间: 2024-05-07 admin IT培训

node.js集群模块如何允许多个子进程在同一端口上侦听?

node.js集群模块如何允许多个子进程在同一端口上侦听?

使用Node.JS和cluster模块。

我试图了解多个分支的子进程如何在同一个端口上进行侦听。

例如,使用cluster模块,我们可以这样做:

const port = 443;
...
if (cluster.isMaster) {
    for(let i = 0; i < numCPUs; i++)
    {
        cluster.fork();
    }
...
}
else // Forked child processes:
{
... 
    https.createServer({
        key: fs.readFileSync('server.key'),
        cert: fs.readFileSync('server.cert')
    }, app)
    .listen(port, () => {
        console.log(`HTTPS Listening on port ${port}`);
    });

}

此代码分叉多个进程,所有这些进程均在同一端口上调用listen。我不清楚所有进程如何绑定同一端口,仍然能够确定哪个进程获取端口流量。这实际上是一种错觉,而是主进程实际上是绑定端口并将请求随机传递给派生子进程的唯一进程吗? (如果是这种情况,会不会影响性能?)

感谢您帮助我了解所有子进程如何可以同时在同一端口上侦听。

请注意,此示例正在Windows机器上运行,但是如果我理解正确,它与Windows和Linux都兼容。

回答如下:

从文档Cluster: How It Works:

集群模块支持两种分配传入数据的方法连接。

第一个(在Windows以外的所有平台上都是默认的,是循环方法,其中主进程侦听端口,接受新的连接,然后将它们分配给所有工人以循环方式,以及一些内置的智能以避免使工作进程超载。

第二种方法是主进程创建监听的地方套接字并将其发送给感兴趣的工作人员。工人然后接受直接进入连接。

“顶级”过程是绑定端口的过程。 IPC通道自动分配给子进程。 “工作人员可以共享TCP连接”。