This is a simple iframe-based PHP Comet example. Additional work must be done to be able to build up and tear-down connections, but the effect is solid. This is a quick and dirty method without having to use heavy feature detection to determine if xhr readystate 3 is available.
frontEnd.html:
Comet demo.hiddenIframe {
position:absolute;
top:0px;
left:0px;
display:block;
z-index:-999;
visibility:hidden;
}
var content = document.getElementById('content');
var dumpText = function(text){
content.innerHTML = content.innerHTML + '
'+ text;
}
backEnd.php:
/*
Simple COMET script tested to work with IE6, IE8, IE9, Chrome 5, Chrome 10, Firefox 3.6.16, Firefox 4, Safari 5, Opera 11
*/
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
//Turn of Apache output compression
// Necessary if you have gzip setup in your httpd.conf (e.g. LoadModule deflate_module modules/mod_deflate.so)
apache_setenv('no-gzip', 1);
ini_set('zlib.output_compression', 0);
//Disable all PHP output buffering
ini_set('output_buffering', 'Off');
ini_set('implicit_flush', 1);
ob_implicit_flush(1);
for ($i = 0, $level = ob_get_level(); $i < $level; $i++) { ob_end_flush(); } //Flush all levels of the buffer to start
error_reporting(E_ALL);
?>
Comet php backendvar dumpText = window.parent.dumpText;
$startTime = time();
$maxLoopTime = 10;
while(time()-$startTime < $maxLoopTime) {
echo '
echo "dumpText(".time().');'.str_repeat(' ',500); //500 characters of padding
echo "\r\n";
flush();
$randSleep = mt_rand(100000, 2000000); //sleep between 100 ms and 2 seconds
usleep($randSleep);
}
?>