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

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

谢谢

最佳答案

如果客户端向服务器发送一个“终止”命令然后关闭连接,这比相反的方式更好。

服务器会一直等到超时再放弃连接。即使该超时时间很小,随着大量连接的进入,它也会使其过载。 这就是为什么在应用服务器上禁用 keep-alive 总是好的原因。

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

关于macos - Socket.io:如何处理关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562391/

相关文章:

macos - 如何在 mac os 10.13 上安装 php-redis 扩展?

image - node.js 图像压缩

node.js - 我可以检测 Node Socket.IO 客户端使用了多少带宽吗?

java - TestBench无法打开浏览器

objective-c - Core Data什么时候自己保存托管对象上下文?

java - 无法识别的虚拟机选项 'ShenandoahGCHeuristics=compact'

javascript - 休息请求签名

node.js - 在Azure中部署Angular4通用应用程序无效的启动命令

javascript - socketio 手动设置套接字 ID

python-socketio 与 Gevent-socketio