b.html(setTimeout()向server.php请求)监听txt.txt文件的上次修改时间,如果判断出文件被修改过,则返回给b.htmla.html只是个发送字符串的代码,它会影响txt.txt的上次修改时间(因为字符串是存到txt.txt文件里的)*问题是:为什么一直执行while里的if呢?
//server.php
<?php
if(isset($_POST['text'])){
file_put_contents('txt.txt', $_POST['text']."\r\n");
echo '1';
exit;
}$filemtime = isset($_POST['filemtime']) && $_POST['filemtime']? $_POST['filemtime']: filemtime('txt.txt');while(1){
if($filemtime == filemtime('txt.txt')){
sleep(1);//这里的问题,高手请来看看
}else{
echo filemtime('txt.txt');
exit;
}
}
?>
//a.html
<input type="text" id="text" value="text">
<input type="button" value="发送" onclick="send()"><script src="../jquery.js"></script>
<script>
function send(){
var text = document.getElementById("text").value; $.post("server.php", {"text": text, "rand": Math.random()}, function(data){
if(data == "1"){
alert("发送成功!");
}
});
}
</script>//b.html
<div id="div"></div><script src="../jquery.js"></script>
<script>
var filemtime = 0;
function test(){
$.post("server.php", {"filemtime": filemtime, "rand": Math.random()}, function(data){
if(data){
filemtime = data;
document.getElementById("div").innerHTML = data;
setTimeout("test()", 1000);
}else{
alert("error");
}
});
}test();
</script>

解决方案 »

  1.   

    comet..while(1)一直监听文件文件是否被修改
    sleep(1)是为了让cpu喘口气,1秒钟后继续监听文件是否被修改。如果被修改,又把修改时间输出,传回给客户端,客户端再把这个时间发送到服务器端,如果有另外一个请求修改了文件,就会把最新的文件修改时间传回给客户端,如此反复最好sleep(1)之后加上clearstatcache()清楚文件缓存。
      

  2.   

    Mark一下等高人答我感觉有点长连接的意思//当然实际上不一样请求频率是比较高的,这样子是为了减少请求次数么?
      

  3.   

    +哈哈,记得上次做这个程序的时候是1年以前了,当时就是加的这个解决了,不过现在又忘了,不错,解决的真快,哈哈,就是clearstatcache的问题,我说怎么好像有缓存的感觉呢,very谢谢!!!
      

  4.   

    一样是轮询,只不过不是由js端硬性每隔一段时间发送http请求,而是由服务器端hold住请求,有修改才输出,break掉while.否则一直处于while(1)循环,客户端就一直在等待返回的状态。。