Socket.io:如何处理关闭的连接?

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

在客户端:

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)?
  • 有没有办法知道我已达到文件限制,以便我可以停止接受连接?

谢谢

回答:

如果客户端向服务器发送一个“终止”命令,然后关闭连接,最好比其他方法更好。

服务器将始终等待超时直到放弃连接。即使超时很小,但有大量连接进入,它也会使它过载。例如,这就是为什么在应用程序服务器上禁用保持活动总是好的。

延迟有所帮助,因为服务器有时间在打开新连接之前关闭连接。

以上是 Socket.io:如何处理关闭的连接? 的全部内容, 来源链接: utcz.com/qa/427942.html

回到顶部