我在 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();
});
Update:自从使用上面的代码以来,我遇到了一个问题close
将使端口保持打开状态(Windows 中为 TIME_WAIT)。由于我有意关闭连接,因此我使用unref https://nodejs.org/api/net.html#net_server_unref因为它似乎完全关闭了 tcp 服务器,尽管我不是 100% 如果这是关闭连接的正确方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)