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