Nodejs随机免费tcp端口

Mar*_*amo 24 port tcp node.js

每次实例化我的类的新实例时,我的项目都需要设置一个新端口.

在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)

  • 如果您想要特定端口,只需尝试侦听它并检查错误事件。如果您收到错误并且“error.code === 'EADDRINUSE'”,那么您就知道该端口正在使用中。 (2认同)
  • 对于 `http.createServer(...).listen()` 也同样有效! (2认同)

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)


Lon*_*yen 6

端口查找器库:

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)


Mar*_*amo 5

要查找打开的 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)