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) .
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
@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? –
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