2011-04-23 9 views

Respuesta

4

Hay un Socket.IO client implementation muy simple para Node.js. No es una herramienta real de evaluación comparativa, pero sí conoce el protocolo de Socket.IO.

Usando eso, es bastante fácil escribir un cliente que interactúa con su aplicación.

+2

que he estado tratando de hacer esto dentro y fuera de los últimos días y hay serios problemas con este enfoque. Está bien para un número bajo de conexiones concurrentes, pero para la conexión cuenta más de unos cientos y comienza a desmoronarse. Puede que esté haciendo algo estúpido, pero las conexiones comienzan a fallar silenciosamente cuando reciben mensajes con demasiada frecuencia. Esto no ocurre a concurrencia baja, solo a concurrencia alta. Cualquiera que sea el motivo, hace que las pruebas de carga realmente serias sean casi imposibles. ¿Esto es un problema con mi aplicación? ¿Has tenido éxito con alta concurrencia? – drewww

+0

@Drewww solo me preguntaba cómo terminaste yendo con esto, encontré parte de tu código en https://github.com/drewww/socket.io-benchmarking y me di cuenta de que parece que implementaste el cliente en python? –

+0

La implementación de Python tampoco funcionó muy bien. La única manera en que conseguí que funcionara a una escala seria (> 1k concurrencia) era usar Java. El intento de Python todavía está en ese repositorio, pero realmente nunca funcionó efectivamente. – drewww

10

Pasé el día investigando la evaluación comparativa de node.js y socket.io, probé una serie de soluciones, encontré que no puede usar wsbench para comparar socket.io porque socket.io tiene su propio protocolo que necesita ser dirigido a hacer las conexiones.

Después de probar algunas otras soluciones sin suerte terminé usando socket.io-benchmark y acabo de conectar 60,000 conexiones en una instancia de m1.large EC2 usando solo un núcleo con espacio de sobra. En mi caso, solo quería medir la sobrecarga de las conexiones de socket.io (lo que requería que comentara algún código en socket.io-benchmark), así que no tenía ningún mensaje enviado entre el cliente y el servidor.

Fue interesante ver que los clientes tomaron más CPU y memoria que el servidor. Así que asegúrate de que el servidor del cliente del que te estás refiriendo sea robusto, utilicé un EC2 c1.xlarge y tenía mucho espacio para la cabeza. Y rompí el índice de referencia en 6 procesos individuales para que pudiera escalar los múltiples núcleos y evitar los límites de memoria.

Tenga cuidado de configurar la opción <rampup in seconds> lo suficientemente alta en los clientes, si la configura en bajo, todo se almacena en búfer y se detiene.

El único problema con socket.io-benchmark es que tuve que usar el nodo v0.4.12 para ponerlo todo en funcionamiento debido a una dependencia en v8-profiler que no se compilará en las versiones más nuevas del nodo (a partir de la escritura) .

0

Para solo la evaluación comparativa de cuántas conexiones concurrentes se pueden configurar, recomendaría wsbench. Sin embargo, no funcionará para los sitios de Socket.IO (debido a un apretón de manos más complicado). Estaba investigando y encontré un par de herramientas que simplemente configuran las conexiones al servidor Socket.IO. No es suficiente para medir el rendimiento real. Lo que necesita es enviar y recibir mensajes reales que simulen clientes reales de su aplicación web. Yo he descrito algunas ideas sobre cómo crear su propio punto de referencia aquí: Benchmarking for Node.JS/Socket.IO sites

3

https://www.npmjs.org/package/thor

Es una utilidad de línea de comandos y tiene una salida similar como Apache Bench

 

Thor:             version: 1.0.0 

God of Thunder, son of Odin and smasher of WebSockets! 

Thou shall: 
- Spawn 1 workers. 
- Create 2 concurrent/parallel connections. 
- Smash 100 connections with the mighty Mjölnir. 

The answers you seek shall be yours, once I claim what is mine. 

Connecting to ws://server:8080/examples/websocket/chat 

    Opened 100 connections 


Online    439 milliseconds 
Time taken   441 milliseconds 
Connected   100 
Disconnected   0 
Failed    55 
Total transferred 132.62kB 
Total received  71.85kB 

Durations (ms): 

        min  mean  stddev median max 
Handshaking   1  5    3  4 20 
Latency    0  0    1  0 3 

Percentile (ms): 

         50%  66%  75%  80%  90%  95%  98%  98% 100% 
Handshaking   4  5  5  6  7  11  17  20  20 
Latency    0  0  1  1  1  1  1  2  3 
+4

Estaba usando Thor recientemente para hacer algunas pruebas de carga y descubrí que Thor realmente no abre conexiones simultáneas. Se cierran poco después de ser abierto. (Descubrí esto usando la pantalla de estadísticas de HAProxy). –

Cuestiones relacionadas