Socket.io: как обрабатывать закрывающиеся соединения? - PullRequest
19 голосов
/ 03 июля 2011

Я пытаюсь понять, каковы «физические» ограничения моего приложения.

На стороне клиента:

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(), почему я все еще использую дескриптор файла (поэтому я достиг предела файла) edit: добавление задержки кажется, что сервер может дышать и никогда не достигает лимита файла)?
  • Есть ли способ полностью закрыть сокет, чтобы я мог быть уверен, что лимит файла редко достигается (я знаю, что могу увеличить его до 65 КБ)?
  • Есть ли способ узнать, что я достиг предела количества файлов, чтобы я мог прекратить принимать соединение?

Спасибо

1 Ответ

1 голос
/ 21 августа 2011

Лучше, если клиент отправит команду «завершить» на сервер, который затем закроет соединение, чем наоборот.

Сервер всегда будет ждать до истечения времени ожидания, прежде чем откажется от соединения. Даже если этот тайм-аут мал, с входящими нагрузками, он будет перегружен. Вот почему, например, всегда полезно отключить поддержку активности на серверах приложений.

Задержка помогает, потому что сервер успевает закрыть соединение перед открытием нового.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...