Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/11/2011, 08:42
Avatar de patkoala
patkoala
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 19
Respuesta: [APORTE]:Chat básico con ajax(long polling)

Explico el funcionamiento.
El archivo index.html envia una petición al archivo index.php.
El archivo index.php no termina de cargar ya que tiene un bucle infinito(además, nunca da error de tiempo de ejecucion gracias a set_time_limit), y en cada ciclo del bucle comprueba si el archivo context.txt ha cambiado su contenido(comparandolo con como estaba al principio).
Cita:
<?php
set_time_limit(0);
$fpa = fopen("content.txt","r");
$fpa = fgets($fpa);
while(1){
$fp = fopen("content.txt","r");
$fp = fgets($fp);
if($fp != $fpa){
echo $fp;
break;
}
sleep(1);
}
?>
Si el contenido cambia, muestra el contenido y termina el bucle.
En ese momento la peticion cambia su readyState a 4, y se ejecuta lo siguiente:
Cita:
document.getElementById('cont').innerHTML += "<br/>" + peticion.responseText;
setTimeout("mostrar()",1);
Que incluye en el div la respuesta del servidor, y acto seguido, envia otra petición igual a la primera.
Por otra parte la funcion cambia() sólo llama a un script que actualiza el contenido de context.txt con los parametros enviados(nombre y texto).
Cita:
function cambia(){
var peticion = xhr();
peticion.open("POST","introducir.php",true);
peticion.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
var query = crearquery();
peticion.send(query);
}
Y, eso es básicamente long-polling.
También podeis probar a editar externamente el archivo content.txt y comprobareis que lo introducido se añade a index.html
Buff, es más fácil aprender que enseñar