2011-06-01 22 views
14

He leído prácticamente todas las guías y tutoriales que puedo encontrar en WebSockets, pero ninguno de ellos ha cubierto cómo usarlos de manera eficiente.Uso de WebSockets ... ¿Eficientemente?

¿Alguien tiene algún tipo de guía sobre cómo hacer esto? Me preocupa la cantidad de ancho de banda que una conexión puede tener, especialmente cuando las aplicaciones tienen cientos de conexiones abiertas.

+0

En realidad, creo que el anfitrión hará bastante bien para mantener a los cachorros en línea, o lo hará el ISP. – jcolebrand

+1

Probablemente, pero una pequeña optimización no puede doler, especialmente en aplicaciones donde la latencia de la red es un factor enorme. – Alexander

+1

¿Desea QoS para websockets ... o qué exactamente? ¿Un máximo global de ellos? ¿Estás preocupado por el cliente o el servidor aquí? – jcolebrand

Respuesta

26

La eficacia en WebSocket depende de la implementación y la arquitectura del servidor web que los maneja. WebSocket es un protocolo muy eficiente con solo 2 bytes (!) De sobrecarga, en comparación con todos los diferentes HTTP header fields y HTTP cookies que se envían en cada solicitud de Ajax.

Por lo general, un servidor web eficiente para websockets debe ser impulsado por eventos (ver los ejemplos a continuación). Por el contrario, la forma tradicional de implementar servidores web ha sido generar un nuevo hilo por solicitud. Pero los hilos asignan mucha memoria, p. 256 MB por hilo. Entonces, si tiene 1GB de memoria en su servidor, no puede manejar muchas solicitudes al mismo tiempo. Pero si su servidor está basado en eventos, su uso de memoria será casi constante, ya que no se crean subprocesos nuevos. Consulte también Technically why is processes in Erlang more efficient than OS threads?

Puede enviar cualquier dato en sus WebSockets. JSON es eficiente si el cliente es un navegador web, o quizás typed arrays. Si su cliente es una aplicación personalizada, puede usar Protocol Buffers. Consulte también Google Wave Client-Server Protocol Whitepaper

Puede implementar servidores websocket eficientes usando Twisted (Python) o Netty (Java). Play Framework es un marco web eficiente para Java y Scala implementado en Netty. Otra alternativa eficiente es el servidor web Yaws (Erlang) o Node.js + Socket.io (JavaScript).

Como desarrollador de aplicaciones, cuantos menos datos envíe, más eficiente (menos tráfico) y menos carga en su servidor.

+0

¿Puede ampliar las circunstancias en las que un subproceso podría usar hasta 256 MB? ¿Esto tiene algo que ver con la tecnología WebSocket en particular? –

+0

La memoria de subprocesos depende del sistema operativo y la tecnología. En general, un hilo para una JVM en un sistema de bytes de 64 bits 1024k de memoria, no 256 MB. Un hilo es un proceso liviano, no todo el sistema operativo. – user3000951