2012-01-10 26 views
18

Uso node.js y socket.io. Tengo un problema con la velocidad de conexión con socket.io. En Internet Explorer y Opera tengo un problema con la velocidad de conexión. - Cuando uso la ranura para el flash o el websocket. Cuando uso el modo de transporte, la conexión XHR de sondeo es rápida, en todos los navegadores (IE, FF, Chrome, Opera).socket.io - XHR polling vs flashsocket y websocket

¿Cuál es la diferencia entre el modo de transporte - XHR-polling y flash/websocket? ¿Cuál es el mejor modo de transporte? Cómo optimizar la velocidad de conexión es socket.io?

¡Gracias por el consejo!

Respuesta

29

Me sorprendería si la velocidad general de la conexión en el tiempo fuera diferente entre los navegadores web, pero la razón por la que verá una demora en la conexión inicial en Internet Explorer y en Opera es que el soporte nativo de WebSocket no es disponible como ha sido deshabilitado por defecto. Por lo tanto, si elige FlashSocket, será necesario descargar un objeto Flash adicional (archivo SWF) antes de establecer una conexión.

WebSockets se están introduciendo en IE10 y en Opera están disponibles, pero están deshabilitados por defecto.

¿Cuál es la diferencia entre el modo de transporte - XHR-polling y flash/websocket?

  • XHR-polling - ver http://en.wikipedia.org/wiki/Push_technology#Long_polling
  • conexión FlashSocket - utiliza un objeto Flash zócalo para establecer una conexión con el servidor de WebSocket y se comunica mediante el protocolo WebSocket. Esto significa que hay interacción entre Flash y JavaScript y también significa que se deberá descargar un objeto Flash adicional (archivos SWF).

¿Cuál es el mejor modo de transporte?

WebSockets para cualquier navegador web que lo soporte nativamente (Chrome, Firefox, Safari). Si el objeto Flash (archivo SWF) está en la caché del navegador, la conexión debe ser rápida. Si no es así, habrá un retraso. XHR Long-Polling es una buena solución y funcionará en el navegador pero hay negativos:

  • entre las solicitudes de sondeo los datos que se muestran pueden estar desactualizados (obsoletos).
  • Es un método de conexión menos eficiente que una conexión TCP única utilizada por WebSockets ya que HTTP Long-Polling utiliza conexión múltiple para simular funcionalidad bidireccional
  • HTTP tiene una tara, lo que significa que se envía información adicional del encabezado a petición y cada subsiguiente solicitud.

cómo optimizar la velocidad de conexión es socket.io?

(soy bastante nuevo en Socket.IO que esto es sólo una sugerencia)

me vería en la configuring Socket.io docs y ver si se puede establecer la forma condicional transports basado en el navegador que se está conectando .Sobre la base de sus experiencias esto podría ser:

  • Chrome, Firefox, Safari - WebSockets
  • IE, Opera - XHR-sondeo
+0

¿Puedo ajustar el flashsocket en IE? ¿Funciona la conexión con el IE? – Jenan

+1

@Jenan sí, FlashSocket debería funcionar en IE siempre que Flash esté instalado. – leggetter

4

Para reducir el tiempo de conexión, se puede tratar de reducir el tiempo de espera de conexión (que es 10 segundos por defecto) usando el parámetro "tiempo de espera de conexión".

Por ejemplo, para reducir el tiempo de espera de conexión a 1 segundo:

socket = io.connect('http://your-site.com',{'connect timeout': 1000});