Socket.io:如何处理closures连接?

我试图了解哪些是我的应用程序的“物理”限制。

在客户端:

var socket = io.connect("http://127.0.0.1:6701"); socket.on('connect', function() { socket.disconnect(); }); socket.on('disconnect', function() { socket.socket.reconnect(); }); 

在服务器端:

 var io = require('socket.io').listen(6701); io.sockets.on('connection', function(socket) { socket.on('disconnect', function(reason) { var o = Object.keys(socket.manager.open).length , c = Object.keys(socket.manager.closed).length , cA = Object.keys(socket.manager.closedA).length , h = Object.keys(socket.manager.handshaken).length console.log("open: " + o) console.log("closed: " + c) console.log("handshaken: " + h) console.log("closedA: " + cA) console.log("---"); }); }); 

在OSX中,当我打到文件限制(256)时,统计如下

 open: 471 closed: 235 handshaken: 471 closedA: 235 

令我困惑的是:

  • 如果我强制closures连接(这是我想要做的客户端disconnect() ,为什么我还在使用文件句柄(所以我打到文件的限制)编辑:增加一个延迟似乎是服务器可以保持呼吸,永远不会达到文件限制)?
  • 有没有办法完全closures套接字,所以我可以肯定的文件限制很less达到(我知道我可以推到65K)?
  • 有没有办法知道我达到了文件限制,以便我可以停止接受连接?

谢谢

如果客户端发送一个“终止”命令给服务器,然后closures连接,反而比其他方式更好。

在放弃连接之前,服务器将一直等待到超时。 即使这个超时时间很短,有大量的连接进来,它会超载。 例如,这就是为什么禁用应用程序服务器保持活动状态总是好的原因。

延迟是有帮助的,因为服务器在打开一个新连接之前有时间closures连接。