while(1){sleep(1);}问题

kyzy_yy_pm 2010-07-01 02:13:23
b.html(setTimeout()向server.php请求)监听txt.txt文件的上次修改时间,如果判断出文件被修改过,则返回给b.html

a.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>
...全文
756 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2010-07-01
  • 打赏
  • 举报
回复
一样是轮询,只不过不是由js端硬性每隔一段时间发送http请求,而是由服务器端hold住请求,有修改才输出,break掉while.否则一直处于while(1)循环,客户端就一直在等待返回的状态。。
kyzy_yy_pm 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 amani11 的回复:]
Mark一下等高人答

我感觉有点长连接的意思//当然实际上不一样

请求频率是比较高的,这样子是为了减少请求次数么?
[/Quote]++
comet(长连接)
kyzy_yy_pm 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 foolbirdflyfirst 的回复:]
comet..

while(1)一直监听文件文件是否被修改
sleep(1)是为了让cpu喘口气,1秒钟后继续监听文件是否被修改。如果被修改,又把修改时间输出,传回给客户端,客户端再把这个时间发送到服务器端,如果有另外一个请求修改了文件,就会把最新的文件修改时间传回给客户端,如此反复。。。最好sleep(1)之后加上clearstatcache()清楚文件缓存。
[/Quote]+哈哈,记得上次做这个程序的时候是1年以前了,当时就是加的这个解决了,不过现在又忘了,不错,解决的真快,哈哈,就是clearstatcache的问题,我说怎么好像有缓存的感觉呢,very谢谢!!!
amani11 2010-07-01
  • 打赏
  • 举报
回复
Mark一下等高人答

我感觉有点长连接的意思//当然实际上不一样

请求频率是比较高的,这样子是为了减少请求次数么?
foolbirdflyfirst 2010-07-01
  • 打赏
  • 举报
回复
comet..

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

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧