gpt4 book ai didi

javascript - 如何正确关闭 Node.js TCP 服务器?

转载 作者:IT老高 更新时间:2023-10-28 23:25:31 26 4
gpt4 key购买 nike

我在 Google 或 SO 上找不到明确的答案。

我知道 net.Server 实例有一个 close 方法,该方法不允许更多客户端进入。但它不会断开已连接的客户端。我怎样才能做到这一点?

我知道用 Http 可以做到这一点,我想我是在问 Tcp 是一样的还是不一样的。

使用 Http,我会做这样的事情:

var http = require("http");

var clients = [];

var server = http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("You sent a request.");
});

server.on("connection", function(socket) {
socket.write("You connected.");
clients.push(socket);
});

// .. later when I want to close
server.close();
clients.forEach(function(client) {
client.destroy();
});

Tcp 也一样吗?或者我应该做些什么不同的事情?

最佳答案

由于没有提供答案,以下是如何在 node.js 中打开和(硬)关闭服务器的示例:

创建服务器:

var net = require('net');

var clients = [];
var server = net.createServer();

server.on('connection', function (socket) {
clients.push(socket);
console.log('client connect, count: ', clients.length);

socket.on('close', function () {
clients.splice(clients.indexOf(socket), 1);
});
});

server.listen(8194);

关闭服务器:

// destroy all clients (this will emit the 'close' event above)
for (var i in clients) {
clients[i].destroy();
}
server.close(function () {
console.log('server closed.');
server.unref();
});

更新:自从使用上述代码后,我遇到了一个问题,即 close 将使端口保持打开状态(Windows 中的 TIME_WAIT)。由于我有意关闭连接,因此我使用 unref因为它似乎完全关闭了 tcp 服务器,但如果这是关闭连接的正确方法,我不是 100%。

关于javascript - 如何正确关闭 Node.js TCP 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com