2010-07-09 34 views
8

Tengo una máquina que ejecuta node.js (v0.1.32) con un servidor tcp (tcp.createServer) y un servidor http (http.createServer). El servidor http es afectado por largas solicitudes de sondeo (que duran 50 segundos cada una) desde una aplicación basada en cometas en el puerto 80. Y hay conexiones de socket tcp en el puerto 8080 desde una aplicación iphone para el mismo propósito.¿Cómo verificar el número de conexiones abiertas en node.js?

Se encontró que el servidor no pudo manejar más conexiones (especialmente las conexiones tcp mientras que las conexiones http parecían estar bien ?? ??) durante un tiempo y era normal solo después de un reinicio.

Para la prueba de carga de las conexiones creé un servidor tcp y engendré 2000 solicitudes y calculé que las conexiones comenzaban a fallar después de alcanzar el límite máximo de descriptor de archivo en la máquina (valor predeterminado 1024). Que es un número realmente muy pequeño.

Entonces, una pregunta de novato aquí: ¿Cómo escalo mi aplicación para manejar más conexiones en node.js y cómo manejo este problema?

¿Hay alguna manera de averiguar cuántas conexiones activas hay en este momento?

Gracias Sharief

Respuesta

3

¡Hola, Joey! Estaba buscando una solución de Unix que me ayudara a descubrir cuántas conexiones abiertas en un momento dado en cualquier momento en mi máquina. La razón fue que mi servidor no pudo manejar las solicitudes después de una cierta cantidad de conexiones. Y me di cuenta de que mi máquina puede manejar solo 1024 conexiones abiertas a la vez, es decir, el valor del descriptor del archivo ulimit que por defecto es 1024. He modificado este valor al configurar ulimit -n que se adapta a mis necesidades.

Para comprobar las conexiones abiertas utilicé lsof que me da la lista de archivos abiertos y calculé cuántas conexiones están abiertas a través de cada puerto que estaba usando.

2

No sé si hay una manera integrada para obtener el número de conexiones activas con el nodo, pero es bastante fácil de manipular algo.

Para mi aplicación Node estilo cometa, guardo un objeto al que agrego conexiones como una propiedad. Cada X segundos, repito sobre ese objeto y veo si hay alguna conexión que deba cerrarse (en su caso, algo más allá de su límite de 50 segundos).

Cuando cierra una conexión, simplemente elimine esa propiedad de su objeto de conexiones. A continuación, puede ver cuántas conexiones están abiertas en cualquier momento con Object.size(connections)

+0

para esta solución, estoy imaginando que el cliente tiene que estar enviando un latido de algún tipo para actualizar si todavía están activos o no. – rlemon

Cuestiones relacionadas