2012-01-17 18 views
8

Estoy construyendo una búsqueda dinámica (actualizada con cada pulsación de tecla): mi esquema actual es enviar, con cada pulsación de tecla, una nueva solicitud AJAX al servidor y recuperar datos en JSON.WebSockets: ¿útil para reducir gastos generales?

Consideré abrir un WebSocket para cada "sesión" de búsqueda para ahorrar algo de sobrecarga. Sé que esto ahorrará tiempo, pero la pregunta es, ¿realmente vale la pena, teniendo en cuenta esos parámetros: 80 ms de tiempo promedio de ping 166ms: tiempo entre cada pulsación de tecla, suponiendo que el usuario escribe relativamente rápido Una tasa de transferencia del peor de los casos de 1 MB/s, con cada paquete de datos que debe recibirse con cada pulsación de tecla que no supere 1 KB. La aplicación también toma algo como 30-40ms para soldar los resultados de búsqueda al DOM.

He encontrado esto: HTTP vs Websockets with respect to overhead, pero era un caso de uso diferente.

¿Los websockets reducirán cualquier cosa además de la sobrecarga HTTP pura? ¿Cuánto cuesta la sobrecarga de HTTP (suponiendo que no hay cookies y encabezados mínimos)?

Supongo que las solicitudes HTTP abren un nuevo socket de red en cada solicitud, mientras que WebSocket nos permite usar solo una todo el tiempo. Si mi comprensión es correcta, ¿cuál es la sobrecarga real de la apertura de un nuevo socket de red?

+3

websockets valen la pena cuando el servidor inserta los mensajes a cliente – Raynos

+0

que he hecho algo similar antes y encontrado que para hacer Es más rápido si lo desea, puede retrasar la solicitud de Ajax durante unos pocos ms y luego cancelarla si el usuario escribe otra clave. Entonces, si el usuario escribe rápidamente, usted hace una solicitud en lugar de muchas. (¡Aunque eso no responde tu pregunta en websockets!) –

+0

Eso es lo que estoy haciendo en este momento. Funciona sin problemas, pero me preocupa que cuando lo implemente, la aplicación podría comenzar a tener problemas en tiempos de ping más lentos. Echa un vistazo a la aplicación real: http://77.70.33.151:8233/ Puedes buscar algo como "firefox", "cromo" o "mozilla". – Ivo

Respuesta

3

Parece que WebSockets proporciona un mejor rendimiento en situaciones como la suya.

Web Socked

  • pequeño apretón de manos cabecera
  • comunicación dúplex completa después de que el apretón de manos.
  • Después de que se establece la conexión, sólo se añaden 2 bytes por petición/respuesta transmitida

Http

  • cabeceras HTTP se envían junto con cada solicitud

Por Por otro lado, WebSocket es una tecnología relativamente nueva. Sería prudente investigar los posibles problemas relacionados con la red del soporte del navegador web.

Ref:

http://websocket.org/quantum.html

http://www.youtube.com/watch?v=Z897fkPn7Rw

http://en.wikipedia.org/wiki/WebSocket#Browser_support

+0

Gracias, el video respondió específicamente mi pregunta (sobrecarga pura de HTTP). En cuanto a la compatibilidad con el navegador, no es difícil implementar mecanismos alternativos o utilizar una biblioteca que lo haga por usted (por ejemplo, socket.io). – Ivo

Cuestiones relacionadas