tutorial socket rooms example macos node.js socket.io

macos - rooms - Socket.io: ¿Cómo manejar las conexiones de cierre?



socket.io https (1)

Es mejor si el cliente envía un comando "terminar" al servidor que luego cierra la conexión, que al revés.

El servidor siempre esperará hasta un tiempo de espera antes de abandonar una conexión. Incluso si ese tiempo de espera es pequeño, con un montón de conexiones entrantes, lo sobrecargará. Por eso, por ejemplo, siempre es bueno deshabilitar el mantenimiento de la vida en los servidores de aplicaciones.

La demora ayuda porque el servidor tiene tiempo para cerrar la conexión antes de abrir una nueva.

Estoy tratando de entender cuáles son los límites "físicos" de mi aplicación.

En el lado del cliente:

var socket = io.connect("http://127.0.0.1:6701"); socket.on(''connect'', function() { socket.disconnect(); }); socket.on(''disconnect'', function() { socket.socket.reconnect(); });

En el lado del servidor:

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("---"); }); });

Cuando en OSX alcanzo el límite del archivo (256) las estadísticas son las siguientes

open: 471 closed: 235 handshaken: 471 closedA: 235

Lo que me está desconcertando es:

  • Si cierro la conexión a la fuerza (esto es lo que me gustaría hacer con la disconnect() del cliente, ¿por qué sigo usando un identificador de archivo (por lo que alcancé el límite del archivo)? edición: agregar un retraso parece que el servidor puede mantener aliento y nunca llega al limite de lima)?
  • ¿Hay alguna forma de cerrar completamente el socket para poder estar bastante seguro de que rara vez se alcanza el límite de archivo (sé que puedo empujarlo a 65K)?
  • ¿Hay alguna forma de saber que estoy llegando al límite del archivo, para poder dejar de aceptar la conexión?

Gracias