2009-07-28 9 views
5

Estoy escribiendo una sala de chat en línea basada en AJAX/COMET. Mi diseño es:¿Comportamiento de tiempo de espera de diferentes navegadores?

Solicitud

----------------- esperar ------------------- ------> enviar datos de volcado

----------------- esperar ------------------ -------> enviar datos de volcado

----------------- esperar ----------------- --------> enviar datos de volcado

----------------- esperar ---------------- ---------> enviar datos de volcado

----------------- espera -------------------------> enviar datos de volcado

------ algo sucedió, obtener respuesta.

Otra solicitud ..... ....

Como se ve, el servidor mantenga la solicitud y esperar algo sucedido, si hay algún evento ocurrido, basta con pulsar datos y solicitud de meta. Entonces el cliente emitirá otra solicitud. Hay un tick en la solicitud, por lo que si hay un evento ocurrido entre la brecha t de dos solicitudes, el servidor sabe que hay un evento pendiente para el cliente.

Antes del tiempo de espera del navegador, el servidor también envía algunos datos inactivos para evitar que el cliente agote el tiempo de espera.

Ahora, aquí viene el problema: ¿qué es el comportamiento de tiempo de espera de los diferentes navegadores? Sé que el navegador envía una solicitud y espera datos, si tarda mucho tiempo en esperar, se agotará el tiempo de espera. Pero, ¿cuál es el tiempo de espera de los diferentes navegadores? ¿Y hay algún encabezado que pueda controlar el comportamiento de tiempo de espera del navegador? Conociendo el comportamiento del tiempo de espera de los navegadores, para poder decidir cómo manejarlos. ¿Dónde puedo encontrar esos datos?

+0

Mira esta respuesta http://stackoverflow.com/a/1343963/779408 – breceivemail

Respuesta

9

En realidad, dado que el cliente podría estar pasando por proxies, los valores explícitos de los tiempos de espera para diferentes navegadores no significan tanto como se podría pensar.

Más bien, le preguntaría por qué lo pregunta: tendrá que lidiar con tiempos de espera, y ninguna cantidad de transmisión en el navegador lo evitará todo el tiempo. Por lo tanto, sería mejor simplemente volver a consultar el servidor del cliente cuando se desconecte, que es una de las razones por las que mucha gente recomienda una encuesta larga, que es lo que parece que intenta hacer. Independientemente de si elige una solución de transmisión o una encuesta larga, debe permitir restablecimientos de conexión.

Para una configuración de cliente iframe oculto simple, it's not too hard to do, y es igualmente fácil para las solicitudes XHR, dependiendo de qué marco de trabajo del cliente está utilizando.

El tiempo de espera para la mayoría de los navegadores modernos parece ser rather large en IE (60 minutos? Wow), y más corto en FF (aproximadamente: config dice 300 segundos - eek) - pero como dije, eso no ayuda contra un proxy, donde el tiempo de espera puede ser de solo 2 minutos o menos, dependiendo de cómo lo configure el administrador del proxy.

Por lo tanto, en resumen, se producen tiempos de espera excedidos. No puedes detenerlos. Codifique a su cliente para que se vuelva a conectar cuando ocurra (con un límite para evitar un vuelco en el servidor), y no se preocupe más. Además de ser más robusto, probablemente también hará que su código sea más eficiente, ya que no estará transfiriendo periódicamente datos inútiles a cada cliente.

Cuestiones relacionadas