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连接”。
最新文章
- 概率图模型(PGM)综述
- 关于C语言编程中include的用法
- 哀悼日
- 数字芯片有哪些,以及它们的功能是什么?
- 网上订餐系统1
- nodejs+vue 智慧餐厅点餐餐桌预订系统
- 积累的VC编程小技巧之打印相关
- Mysql与Postgresql常用命令比较
- CLion 入门
- EXTI外部中断
- C++实现matlab中的interp1和interp2插值
- JavaScript弹出框、对话框、提示框、弹窗总结
- int.TryParse 方法
- 在android项目上集成libyuv库以及使用libyuv库完成camera的缩放,旋转,翻转,裁剪操作
- 高斯函数详解
- 【CTDB】什么是CTDB(Cluster Trivial Database)
- Qt数据库(三)利用QSqlQuery类执行SQL语句(一)