Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/03/2009, 06:00
Avatar de ZiTAL
ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
ejemplo de Comet con PHP: long polling

Hola a todos, hace unos días vi el post de Panino50001 sobre su chatino y me puse a la obra para hacer un ejemplo simple. Como bien dice Panino50001 no es un COMET total, ya que desde las misma llamada no puede hacer varias salidas por pantalla, me explico. Yo pensaba que se trataba de hacer una llamada y que esa misma llamada te devolviese los valores cuando hiciese falta, pero la cuestión es que una llamada solo devuelve un resultado, la cuestion es que con este pseudo-comet lo único que sabemos es CUANDO ha cambiado la cosa en el servidor por lo tanto si queremos que el COMET sea continuo, deberemos hacer la llamada a la misma función una y otra vez. Veamos un ejemplo:
- Tengo un fichero: contenido.txt en el cual si el contenido no esta vacío me lo muestre por pantalla:

contenido.txt -> Un fichero vacio

index.php
Código PHP:
<?php
if($_POST)  
{
    
set_time_limit(0); // para quitar el timeout    
    
header("Edge-control: no-store");
    
$content trim(file_get_contents('contenido.txt'));
    while(
$content=='')
        
$content trim(file_get_contents('content.txt'));
    echo 
$content;
    exit();
}
?>
Código HTML:
<html>
<head>	
</head>
<body>
	<div id="content">Cargando...</div>
<script type="text/javascript" src="comet.js"></script>
</body>
</html> 
comet.js
Código javascript:
Ver original
  1. var xmlhttp = function()
  2.     {
  3.         var a;try{a = new XMLHttpRequest();}
  4.         catch(e){try{a = new ActiveXObject('Msxml2.XMLHTTP');}
  5.         catch(e){try{a = new ActiveXObject('Microsoft.XMLHTTP');}
  6.         catch(e){alert('Your browser doesn\'t support ajax');a=false;}
  7.         }}return a;
  8.     }; 
  9.     window.onload = function()
  10.     {
  11.         var a = new comet();
  12.     }; 
  13.     var comet = function()
  14.     {
  15.         var a = new xmlhttp();
  16.         a.open('post',window.location+"?"+Math.random()+"="+Math.random(), true);
  17.         a.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  18.         a.onreadystatechange = function()
  19.         {
  20.             if(a.readyState == 4)
  21.             {
  22.                 document.getElementById('content').innerHTML = a.responseText;
  23.             }
  24.         };
  25.         a.send('algo=algo');               
  26.     };

y cargamos la página, si tenemos firebug en firefox nos mostrará que la petición ajax está esperando una respuesta.

Ahora abrimos el fichero contenido.txt y escribimos algo.

Veremos como en div 'content' ha cargado lo que hemos guardado en el fichero :)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan