gpt4 book ai didi

node.js - Node.js 如何选择随机端口?

转载 作者:IT老高 更新时间:2023-10-28 23:13:36 25 4
gpt4 key购买 nike

使用 Node.js,我们可以创建一个服务器并监听一个随机端口:

var server = net.createServer();
server.listen(0, '127.0.0.1');

第一个参数port 0表示选择随机端口,127.0.0.1表示只监听localhost,as documented .

Node.js 是否选择了未使用的端口?如果 Node.js 碰巧选择了一个已经打开并绑定(bind)到另一个应用程序的端口,我是否必须自己检查并重试?它会选择任何旧端口,还是只选择用户端端口 (>1024)?

最佳答案

操作系统分配端口号。见 https://github.com/joyent/node/blob/v0.6.11/lib/net.js#L780-783

在 OS X 上,分配是顺序的、用户态的,并且不检查端口以确认它没有被使用。

在 Ubuntu 11.04 上,分配是随机的、用户态的,也不会检查端口是否正在使用中。

以下脚本可用于在其他平台上进行测试。为了验证端口是用户空间,我通过 bash 将脚本运行了 10,000 次,通过管道连接到 grep -c "p​​ort: [0-9]{1,3}",匹配为零。<​​/p>

var net = require('net'),
firstPort;

(function createServer(port) {
var server = net.createServer();
server.listen(port, function() {
address = server.address();
if (port === 0) {
if (firstPort === undefined) {
firstPort = address.port;
// cause a EADDRINUSE in 10 more sockets for sequential platforms
// without this, will run out of fd's before hitting EADDRINUSE
createServer(firstPort + 10);
console.log('addr in use port trap: ', firstPort + 10);
} else {
// on OS X (sequential) this will increment the OS's sequential counter
// and not cause EADDRINUSE
createServer(address.port + 1);
}
createServer(0);
}
console.log("requested port:", port, " binded port:",address.port);
});
})(0);

关于node.js - Node.js 如何选择随机端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com