【发布时间】:2011-09-27 14:10:02
【问题描述】:
我试图了解我的应用程序的“物理”限制。
在客户端:
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
让我不解的是:
- 如果我强行关闭连接(这是我想对客户端
disconnect()执行的操作,为什么我仍在使用文件句柄(所以我达到了文件限制)编辑:添加延迟似乎服务器可以保持呼吸并且永远不会达到文件限制)? - 有没有办法完全关闭套接字,这样我就可以确定很少达到文件限制(我知道我可以将它推到 65K)?
- 有没有办法知道我已达到文件限制,以便我可以停止接受连接?
谢谢
【问题讨论】:
-
如果在客户端中,我在断开连接之前添加了一些延迟(500 毫秒),服务器会自行稳定并且永远不会达到最大文件限制
-
好问题,克劳迪奥! p.s.请接受更多答案。 ;)