Foros del Web » Programando para Internet » Javascript »

long polling (ajax) no funciona bien del todo

Estas en el tema de long polling (ajax) no funciona bien del todo en el foro de Javascript en Foros del Web. Muy buenas. A ver si alguien me puede echar una mano con este problemilla. No sé si debería postearlo en PHP o MYsQL, ya que ...
  #1 (permalink)  
Antiguo 08/02/2012, 08:37
 
Fecha de Ingreso: octubre-2010
Mensajes: 189
Antigüedad: 13 años, 6 meses
Puntos: 0
long polling (ajax) no funciona bien del todo

Muy buenas.

A ver si alguien me puede echar una mano con este problemilla.
No sé si debería postearlo en PHP o MYsQL, ya que siendo un problema de Ajax (y la técnica long polling) está localizado en la parte de PHP y MySql, en las páginas de PHP.

Tengo un chat uno a uno.
Para ello tengo dos funciones:
1. Se lanza (con javascript) cuando un usuario pulsa en Intro para enviar un mensaje en un textárea. Esta función abre la página1.php en la que hacemos una consulta a la base de datos para introducir dicho mensaje y mostrarlo en la pantalla del usuario que lo ha enviado (sólo en esa).
2. Se lanza cada determinado tiempo (1 sg, más o menos) mediante un timeOut. Abre la página2.php en la que se hace una consulta a la base de datos para ver si hay algún mensaje que no se ha mostrado y lo muestra (mensajes que no hemos enviado nosotros, sino el otro usuario, es decir los mensajes que fueron introducidos en la otra página y mostrados en la pantalla del que los envió ).




Esto me funciona bien, pero...como a veces se demora un poquito la respuesta (ésto es un poco chungo tratándose de un chat) y además, según parece, consume mucho ancho de banda, pues estoy intentando introducir la técnica de long polling.



Entonces, lo que hago es introducir dicha técnica en la página dos, para que no se envíen contínuas peticiones (con el timeOut) y la respuesta sea más inmediata.

Este es el código utilizado para ello:

Código PHP:
...

include(
'conexioninclude.php');
mysql_set_charset('utf8');

$start_time time();
while ((
time() - $start_time) < 30) {
  
$registros mysql_query("SELECT*FROM chat WHERE (password1='$password1' AND password2='$password2')AND(date>($time-300))",$conexion)
    or die(
"Error en el select :".mysql_error());

  if (
$reg=mysql_fetch_array($registros)) {
    
$response=$reg['myvariable'];
    echo 
$response;
    exit();
  }

  
usleep(1000);
}
.... 

No he puesto todo el código de la página, para no liarlo, pero lo puedo poner encantado.

Entonces, mediante dicha técnica, durante 30 segundos, se está esperando si hay algún update en la base de datos y lo muestra de inmediato.
Lo curioso es que esta parte la hace bien, y es lo que me hace seguir confiando en esta técnica, porque muestra los mensajes al instante.
Pero....no sé porqué!! los mensajes, que se introducen, desde la primera página (página1.php) lo hacen ahora mucho más despacio, y encima no lo hacen en el orden con que son enviados.
¡No entiendo porqué el longpolling de la segunda página afecta a la primera!!

Bueno, agradezco cualquier ayuda.
Igual es necesario que ponga más código, pero quería explicar primero la lógica que sigue.

¡¡Un saludo!!.

p.d Por cierto, estoy trabajando en Apache. ¿Puede ésto influir negativamente?(he leído que sí, pero no sé hasta qué punto. Yo lo estoy probando solo con dos personas).

Etiquetas: ajax, chat, longpolling
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:25.