Nodejs 如何停止监听和释放一个端口

Nodejs 如何停止监听和释放一个端口

通过net模块的createServer和listen可以监听一个端口,那如何停止监听和释放一个端口呢?

3 回复

Node.js 如何停止监听和释放一个端口

在 Node.js 中,使用 net 模块创建服务器时,可以通过调用特定的方法来停止监听并释放端口。以下是一个简单的示例,展示了如何启动和停止一个服务器。

启动服务器

首先,我们创建一个简单的 TCP 服务器:

const net = require('net');

// 创建服务器
const server = net.createServer((socket) => {
    socket.write('Echo server\r\n');
    socket.pipe(socket);
});

server.listen(3000, () => {
    console.log('Server is listening on port 3000');
});

在这个例子中,服务器会监听 3000 端口,并且任何连接到该端口的客户端都会收到回显(即发送什么就返回什么)。

停止服务器并释放端口

要停止服务器并释放端口,我们可以使用 server.close() 方法。此外,为了确保所有已连接的客户端都断开连接,我们可以使用 server.end() 方法。

// 关闭服务器
server.close(() => {
    console.log('Server has been closed');
});

server.close() 方法会关闭服务器,不再接受新的连接,但已有的连接仍然保持。如果需要强制断开所有连接,可以使用 server.end() 方法:

server.end(() => {
    console.log('All connections are terminated');
});

示例代码

下面是完整的示例代码,展示了如何启动、停止和释放端口:

const net = require('net');

// 创建服务器
const server = net.createServer((socket) => {
    socket.write('Echo server\r\n');
    socket.pipe(socket);
});

server.listen(3000, () => {
    console.log('Server is listening on port 3000');
});

// 停止服务器
setTimeout(() => {
    server.close(() => {
        console.log('Server has been closed');
    });
}, 5000); // 5秒后关闭服务器

在这个示例中,服务器将在启动后的 5 秒后自动关闭。你可以根据实际需求调整定时器的时间。

总结

  • 使用 server.close() 来停止监听端口。
  • 使用 server.end() 来强制断开所有连接。
  • server.close() 不会立即释放端口,它只是停止接受新连接。已有的连接会继续运行直到完成。

通过这些方法,你可以灵活地管理 Node.js 服务器的生命周期,确保资源被正确释放。


要停止Node.js应用对某个端口的监听并释放该端口,可以通过调用服务器实例的 close 方法来实现。close 方法会停止监听,并且在关闭连接后释放端口。

以下是一个简单的示例代码,展示了如何启动一个HTTP服务器并停止监听:

const http = require('http');

// 创建一个HTTP服务器
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
});

// 监听3000端口
server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

// 停止监听并释放端口
setTimeout(() => {
  server.close(() => {
    console.log('Server has been closed');
  });

  // 如果需要再次监听同一个端口,可以重新创建服务器实例
  server.listen(3000, () => {
    console.log('Server is listening on port 3000 again');
  });
}, 5000);  // 5秒后停止监听

在这个示例中,我们首先创建了一个HTTP服务器,并让它监听3000端口。然后,我们使用 setTimeout 在5秒后调用 server.close() 方法来停止监听。server.close() 会触发 'close' 事件,表示服务器已经成功关闭所有连接并释放了端口。如果你需要再次监听同一个端口,可以在关闭服务器之后重新创建一个新的服务器实例并监听该端口。

如果希望在关闭服务器时确保所有活动连接都被正确处理,可以在 server.close() 回调中添加额外逻辑。

回到顶部