【发布时间】:2020-04-09 04:24:12
【问题描述】:
使用 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。
【问题讨论】:
标签: node.js fork port node-cluster