每次实例化我的类的新实例时,我的项目都需要设置一个新端口.
在Node.js中我如何找到一个可在我的新套接字服务器中设置的免费TCP端口?或者检查我的指定端口是否已被使用.
msc*_*dex 46
您可以通过指定端口绑定到OS分配的随机自由0端口.这样您就不会受到竞争条件的影响(例如,在您有机会绑定它之前检查一个开放端口和一些绑定到它的进程).
然后您可以通过调用获取指定的端口server.address().port.
例:
var net = require('net');
var srv = net.createServer(function(sock) {
sock.end('Hello world\n');
});
srv.listen(0, function() {
console.log('Listening on port ' + srv.address().port);
});
Run Code Online (Sandbox Code Playgroud)
Nin*_*ham 19
对于 Express 应用程序:
const app = require('express')();
const server = app.listen(0, () => {
console.log('Listening on port:', server.address().port);
});
Run Code Online (Sandbox Code Playgroud)
pri*_*lus 17
我使用这种紧凑的形式:
import net from "net"
async function getPortFree() {
return new Promise( res => {
const srv = net.createServer();
srv.listen(0, () => {
const port = srv.address().port
srv.close((err) => res(port))
});
})
}
Run Code Online (Sandbox Code Playgroud)
使用:
const PORT = await getPortFree()
Run Code Online (Sandbox Code Playgroud)
端口查找器库:
https://github.com/http-party/node-portfinder
我建议你使用portfinderlibrary,它一周的下载量超过1000万次。
默认情况下,portfinder库将从 8000 开始搜索并扫描,直到达到最大端口号 (65535)。
const portfinder = require('portfinder');
portfinder.getPort((err, port) => {
//
// `port` is guaranteed to be a free port
// in this scope.
//
});
Run Code Online (Sandbox Code Playgroud)
要查找打开的 TCP 端口,您可以使用portastic模块
你可以找到这样的端口:
port = require('portastic');
options = {
min : 8000,
max : 8005
}
port.find(options, function(err, data){
if(err)
throw err;
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)