2010-10-01 24 views
14

Estoy construyendo un componente de una página web que necesita un sondeo de bases de datos relativamente constante. Puedo ver dos enfoques diferentes para esto, y me pregunto si uno de ellos es mejor que los otros, o si me falta una tercera opción.Frecuencia de sondeo AJAX: ¿para una encuesta larga o no para una encuesta larga?

1) Envíe una solicitud AJAX cada 1 o 2 segundos para buscar actualizaciones. Cada solicitud devuelve inmediatamente si hay nuevos datos o no.
2) Disparar una sola solicitud AJAX que no se devolverá hasta que reciba datos o se produzca un tiempo de espera. En cualquiera de estos casos, se activa la próxima solicitud. (Creo que esto se llama larga encuesta?)

El número de consultas de la base de datos será el mismo con cualquiera de ellos, pero con el # 2 habría menos solicitudes de activación del navegador que podrían ahorrar ancho de banda y recursos del cliente. Para el servidor, ¿es mejor tener una sola solicitud PHP que se mantenga activa y que duerma entre consultas, o que se active cada pocos segundos, sondee la base de datos y luego se apague? ¿O no hay diferencia y estoy insistiendo demasiado en esto?

EDITAR: Supongo que también debo decir que este es un widget de chat de una aplicación web más grande. Un ligero retraso en la comunicación no va a matar a un usuario, ya que el chat es una función secundaria.

+0

Esto realmente depende de cuánto tiempo durará la encuesta larga y la cantidad de clientes que tenga conectados. Si tiene 2 o 3, la encuesta larga puede funcionar mejor (ya que las actualizaciones serán instantáneas). Si tiene mucho, la encuesta larga será MUY cara, ya que cada conexión requiere un proceso de PHP (ya que PHP lo mantiene abierto). Entonces, en ese caso, usaría un intervalo de sondeo "inteligente". Básicamente, si el tiempo promedio para actualizar es de 10 segundos, sondee 5, luego 8, luego 10, luego 11, etc.). Básicamente solo reduzca el tiempo a la mitad. Es más fácil para el servidor (ya que la carga promedio se reduce), pero es rápido ... – ircmaxell

+0

Supongo que también debo decir que este es un widget de chat de una aplicación web más grande. Un ligero retraso en la comunicación no va a matar a un usuario, ya que el chat es una función secundaria. Pero queremos que sea razonable (¿dentro de 2 segundos?) – Derek

+0

Honestamente, no haría esto en PHP. Obtenga otro idioma e implemente un sistema de cola y use las conexiones TCP persistentes para conversar de ida y vuelta ... O, ¿por qué no simplemente instalar Jabber y terminar? (Y quizás implementar una interfaz JS para el servidor) ... – ircmaxell

Respuesta

8

sondeo largo escalará mejor (es decir, menos carga del servidor) de la votación, mientras que da mucho mejor tiempos de respuesta.

Si su destinatario sondea, el tiempo medio de viaje de un mensaje será la mitad de su intervalo de encuesta.

Con un sondeo largo, es instantáneo: el servidor solo espera si no hay nada que decir.

Si está enviando mensajes de chat, haga una encuesta larga; es una cosa de usabilidad.

El lado descendente con largo sondeo es más complicado de implementar; pero no es mucho más complicado, y está ampliamente implementado. Entonces, si no puede usar un marco estándar para su servidor web de su elección, puede comenzar a escribir uno razonablemente y lo pondrá en funcionamiento.

+1

De acuerdo.Pero con una docena de clientes que tocan el sistema, eso es una docena de procesos php que están activos el 100% del tiempo. En lo que respecta a la escalabilidad, supongo que no es mucho peor que la mitad de los que lo golpean por segundo. – Derek

+0

Asegúrate de que esos procesos duerman bien, no en algunas encuestas propias, y todo será agradable y sin complicaciones. Preocúpese cuando tenga unos pocos cientos o quizás más clientes. – Will

2

También puede mirar en websockets, que forma parte de los nuevos navegadores (o emulado a través de un Flash file se le cae en su página)

+0

Lamentablemente, necesito poder admitir navegadores actuales y posiblemente heredados. Definitivamente vale la pena un poco más de investigación. ¡Gracias! – Derek

+1

Eso es lo que hace el adaptador flash – Will

Cuestiones relacionadas