📜  Node.js server.close() 方法(1)

📅  最后修改于: 2023-12-03 15:33:09.918000             🧑  作者: Mango

Node.js server.close() 方法

在 Node.js 中,server.close() 方法可以关闭一个正在运行的 HTTP 或 HTTPS 服务器。该方法会停止服务器接收新的连接,并安全地关闭现有的连接。

语法
server.close([callback])

参数:

  • callback:可选,一个回调函数,在服务器完全关闭后执行。
使用方法

首先,我们需要创建一个 HTTP 服务器:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
});

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

然后,我们可以使用 server.close() 方法关闭该服务器:

server.close(() => {
  console.log('Server has been closed.');
});

在上述代码中,我们通过传递一个回调函数来捕获服务器完全关闭后的事件。 server.close() 方法会立即停止服务器接收新的连接,并等待现有连接关闭。请注意,该方法并不会立即终止正在运行的请求,而是会等到所有请求都得到处理为止。

示例

下面我们来看一个示例,我们通过 setTimeout() 函数来模拟服务器一段时间后关闭,然后在关闭之前我们向该服务器发送请求,以验证关闭前后该服务器的状态。

const http = require('http');

const server = http.createServer((req, res) => {
  console.log('Received a request.');
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
});

server.listen(8080, () => {
  console.log('Server is running on port 8080.');
  
  setTimeout(() => {
    server.close(() => {
      console.log('Server has been closed.');
    });
  }, 5000); // 模拟5秒后关闭服务器
});

http.get('http://localhost:8080', (res) => {
  console.log(`Got response: ${res.statusCode}`);
  
  res.on('data', (chunk) => {
    console.log(`Received data: ${chunk}`);
  });
  
  res.on('end', () => {
    console.log('Response ended.');
  });
}).on('error', (err) => {
  console.log(`Got error: ${err.message}`);
});

该示例中,我们首先创建了一个 HTTP 服务器,并通过 setTimeout() 函数模拟了5秒后关闭该服务器。在服务器关闭之前,我们向该服务器发送了一个 HTTP 请求。当服务器关闭时,我们可以看到“Received a request.”的输出不再出现,这表明服务器已经停止接收新的请求。同时,由于现有请求还没有完成,我们可以看到相应的响应数据被正常地执行,直至响应结束。

总结

server.close() 方法是一个常用的方法,可以帮助我们关闭一个正在运行的 HTTP 或 HTTPS 服务器。当我们需要修改服务器配置或停止服务器时,该方法可以很方便地调用,以确保操作成功且安全。