【发布时间】:2015-03-16 06:59:33
【问题描述】:
我在 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 也一样吗?或者我应该做些什么不同的事情?
【问题讨论】:
-
是的,一样。如果您需要硬关机,请在执行
server.close()之前保留已连接客户端的列表并关闭所有活动(但如果真的“很难”,那么执行process.exit()可能会更好) -
不要忘记在它们断开连接时删除套接字(例如套接字的
close事件),否则您最终会得到一个包含潜在死套接字的不断增加的套接字数组。
标签: javascript node.js http tcp server