Geo*_*ris 3 node.js node-cluster
我在阅读有关 Node js 中的集群的内容时遇到了一个简单的示例,而主文件创建了四个子进程,每个进程都监听 8080 端口。
代码运行良好,但我不明白:
如何让多个子进程监听同一个端口?
我期待收到这样的消息
错误:监听 EADDRINUSE:地址已在使用中 :::8080
const cluster = require("cluster");
if (cluster.isMaster) {
for (let i = 0; i <= 4; i++) cluster.fork();
} else {
require("./test.js");
}
Run Code Online (Sandbox Code Playgroud)
测试.js
const http1 = require("http");
http1
.createServer((req, res) => {
console.log("request1");
res.write("hello1");
res.end();
})
.listen(8080, () => {
console.log("begin");
});
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 14
不久前我自己也想知道这个问题并开始挖掘。
子进程没有监听同一端口。与主进程的传入套接字连接被委托给子进程。
这里实际发生的事情是欺骗性的,因为您肯定会server.listen()在每个子进程中看到 。但是,内部.listen()有一些魔法知道这个进程是一个集群进程,因此它们不是在传统意义上实际监听(这确实会导致您引用的错误),而是监听来自其的委托套接字。父母。
如果我设计这个,我可能不会隐藏这个功能.listen()并导致这种混乱。我会提供一种在这种情况下使用的不同方法来实现这种特殊行为。
如果您想了解更多相关信息,这里有一些资源:
server.listen() 您可以看到它在某些情况下调用的源代码listenInCluster()。
在Net 文档中server.listen(),引用了集群时的特殊处理。
此处执行行为的listenInCluster() 源代码本身:
// Get the master's server handle, and listen on it
cluster._getServer(server, serverQuery, listenOnMasterHandle);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |