以下代码使网络加载时间为10分钟,我不知道为什么!
function chatheartbeat(){
include("config.php");
$useradn = $_SESSION['displayname'];
$query = "select * from chat where (userbdn = '".$useradn."' AND isread = 1) order by id ASC";
$result = mysql_query($query , $link);
$num_rows = mysql_num_rows($result);
if ($num_rows >= 1) {
$items = array();
$i='1';
while($chat = mysql_fetch_array($result)){
$items[$i]['from']=$chat['useradn'];
$items[$i]['msg']=$chat['msg'];
$items[$i]['timee']=date("H:i" ,$chat['timee']);
$i++;
}
$query = "update chat set isread = 0 where userbdn = '".$useradn."' and isread = 1";
mysql_query($query , $link);
header('Content-type: application/json');
echo json_encode($items);
exit;
}else{
sleep(2);
chatheartbeat();
}
}
有什么建议吗?
答案 0 :(得分:2)
你正在递归地调用你的函数,因为会话变量在函数调用之间没有变化,如果它第一次进入else
部分,它每次都会去那里,创建一个永无止境的循环。
顺便说一句,如果你想使用轮询,你应该在客户端部分(javascript)中设置一个计时器,而不是在服务器端使用递归函数。
答案 1 :(得分:2)
在第一次选择产生一些结果之前,该功能永远不会返回。
我建议您在n次运行后返回(例如5),即使没有结果。然后,客户端可以重新发出ajax调用以再次轮询。
此外,以递归方式执行此操作并不是一个好主意。我建议在for循环中这样做。
答案 2 :(得分:1)
执行任何长轮询技术时,您需要了解一些事项。
您需要在预定义的时间段后退出。在服务器上等待,直到您有回应的内容将导致执行超时。
了解您的SESSION数据发生了什么。默认情况下,PHP将使用基于文件的会话并在请求过程中锁定文件(除非您介入)