简单PHP Comet示例

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.

References:
Even Faster Web Sites by Steve Souders
http://www.zeitoun.net/articles/comet_and_php/start
http://cometdaily.com/2007/11/18/ie-activexhtmlfile-transport-part-ii/

frontEnd.html:

<html>
<head>
	<title>Comet demo</title>
	<style type="text/css">
    	.hiddenIframe {
    		position:absolute;
    		top:0px;
    		left:0px;
    		display:block;
    		z-index:-999;
    		visibility:hidden;
		}
	</style>
</head>
<body>
<div id="content">The server time will be shown here</div>
<script type="text/javascript">

	var content = document.getElementById('content');
	var dumpText = function(text){
		content.innerHTML = content.innerHTML + '<BR>'+ text;
	}
</script>
<iframe src="backEnd.php"></iframe>
</body>
</html>

backEnd.php:

 

<?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);

?><html>
<head>
  <title>Comet php backend</title>
</head>
<body>
<script type="text/javascript">
	var dumpText = window.parent.dumpText;
</script>
<?php

$startTime = time();
$maxLoopTime = 10;

while(time()-$startTime < $maxLoopTime) {

	echo '<script type="text/javascript">';
	echo "dumpText(".time().');'.str_repeat(' ',500); //500 characters of padding
	echo "</script>\r\n";

	flush();

  	$randSleep = mt_rand(100000, 2000000); //sleep between 100 ms and 2 seconds
	usleep($randSleep);
}

?>
<script type="text/javascript">dumpText("Output Finished");</script>
</body>
</html>

reference : http://jsjoy.com/blog/197/simple-php-comet-example

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>