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连接。