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.
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
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
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