如何正确closuresNode.js TCP服务器?

我无法在Google或SO上find明确的答案。

我知道一个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是一样的吗? 还是我应该做不同的事情?

       

网上收集的解决方案 "如何正确closuresNode.js TCP服务器?"

由于没有提供答案,下面是一个如何在node.js中打开和(closures)服务器的例子:

创build服务器:

 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); 

closures服务器:

 // 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将保持打开的端口(TIME_WAIT在Windows中)。 由于我故意closures连接,因此我使用了unref,因为它似乎完全closures了tcp服务器,但如果这是closures连接的正确方法,我不是100%。