用Nodejs获取一个可用端口

842 阅读1分钟

需求

在 Node.js 应用中,获取一个可用端口是一个很常见的任务,例如在开发 Web 服务器或网络应用程序时,需要绑定一个可用端口。在本文中,我们将讨论如何使用 Node.js 的内置模块来获取一个可用的端口。

原理

Node.js 提供了一个内置的 net 模块,该模块提供了创建 TCP 或 UNIX 套接字服务器和客户端的功能。我们可以使用 net.createServer() 方法创建一个 TCP 服务器,并通过 listen() 方法来绑定一个可用的端口。

代码

以下是一个使用 net.createServer()listen() 方法来获取一个可用端口的函数实现:

const net = require('net');

function getFreePort() {
  return new Promise(res => {
    const srv = net.createServer();
    srv.listen(0, () => {
      const port = srv.address().port;
      srv.close(() => res(port));
    });
  });
}

该函数返回一个 Promise 对象,其中包含获取到的可用端口。在这个函数中,我们创建了一个 TCP 服务器对象 srv,并将其绑定到端口 0 上,这将使操作系统自动分配一个可用的端口。

一旦服务器成功绑定到端口上,我们可以通过 srv.address().port 来获取绑定的端口号,并将其存储在变量 port 中。然后,我们关闭服务器并通过 Promise 的 res 函数将 port 变量传递给调用方。

使用该函数时,我们只需要调用 getFreePort() 方法即可。例如:

getFreePort()
  .then(port => {
    console.log(`The available port is: ${port}`);
  })
  .catch(err => {
    console.error(`Error occurred: ${err}`);
  });

在上面的例子中,当 getFreePort() 方法成功返回时,我们将可用端口号打印到控制台中。如果出现错误,则会打印相应的错误信息。