Get it on Google Play

HTTP_Streaming

25-05-2007
 

El HTTP_Streaming es una tècnica que podem fer servir amb AJAX per tal de tenir aplicacions mes dinàmiques.

HTTP_Streaming es tracta de fer una petició HTTP al servidor i que el servidor no tanqui la sessió, de forma, que tenim un socket obert en direcció servidor a client. Molt útil a l’hora de fer aplicacions on el procés a realitzar en el servidor sigui llarg. Per exemple: Cercadors, Metasearchs, aplicacions de treball en Grid, etc.

Exemple bàsic:

codi client HTML:

<div id=’streaming’></streaming>

<script language=’javascript’>

function streamIn(url) {
  stream.pos=0;

  cridaAjax( url, function( ) {
    if (req.readyState == 3) {
    var s=req.responseText.substring( pos, req.responseText.length );
    while ( s.indexOf(“#\n\n#”)!=-1 ) {
      var pos2=s.indexOf(“#\n\n#”);

      connectionBar.innerHTML=s.substring(0,pos2);
      eval(s.substring(0,pos2));

      pos+=pos2+4;
      s=req.responseText.substring( pos, req.responseText.length );
      }
    }
  });
  }

var req=false;
function cridaAjax( url, func ) {
  // Creo el gestor de peticions
  if (window.XMLHttpRequest) req = new XMLHttpRequest();
    else if (window.ActiveXObject) req = new ActiveXObject(“Microsoft.XMLHTTP”);

  // Mostro missatge de carregant o error
  if (!req) return;

  // Faig la petició
  req.open(“GET”, url, true);
  req.onreadystatechange = func;

  try { req.send( null ); } catch (failed) { alert( failed.message ); }
  }

streamIn(“servidor.php”);
</script>

codi servidor PHP:

while (true) {
  usleep(100); // Temps per a no co·lapsar
  echo “document.getElementById(‘ini’).innerHTML=’$i – $num’;”;

  echo “#\n\n#”; // Final de transmisió
  flush(); // Buidat del buffer

  $i++;
  }

La idea es veu perfectament en el codi: Petició HTTP al servidor i esperar a que vagi arribant la informació. S’ha de definir una senyal de final de missatge per poder saber quan s’ha de interpretar un conjunt de dades i tenir un comptador per saber de tot el buffer de la connexió quin tros s’ha interpretat i quin no.

Leave a Reply

© Albert Coronado Calzada