Php 轮询Apache服务器未响应

Php 轮询Apache服务器未响应,php,mysql,ajax,apache,loops,Php,Mysql,Ajax,Apache,Loops,在运行控制消息轮询的脚本时,我用来开发系统的apache服务器不会响应请求。这只发生在域级别,这意味着我可以向本地托管的任何其他应用发送http请求并获得响应。当我最终得到回应时,大约一分钟后 这是Js window.fetch_messages = function () { var last_message = $("div.message:last").attr('data-ai_id'); var last_message_status = $("p.message_st

在运行控制消息轮询的脚本时,我用来开发系统的apache服务器不会响应请求。这只发生在域级别,这意味着我可以向本地托管的任何其他应用发送http请求并获得响应。当我最终得到回应时,大约一分钟后

这是Js

window.fetch_messages = function ()
{
    var last_message = $("div.message:last").attr('data-ai_id');
    var last_message_status = $("p.message_status:last").text();
    var project_id = getParameterByName('project-id');

    $.ajax({
            url:'/project_messages',
            type:'POST',
            data:{ project_id:project_id, latest_message:last_message, status:last_message_status },
            timeout:50000,
            async: true,
            success:new_messages, // This upon completion also resends the request
            error:function(data){ console.log(data); setTimeout(fetch_messages(),50000); }
    });

}; // When On the page that uses this I call this function to start polling
这是服务器端代码

do 
{
    // Check for status change
    $status_change = $this->mentor_model->query_status($this->project_id, $this->last_message_id, $this->last_message_status, $_SESSION['user']); 

    // Check for new messages
    $messages = $this->mentor_model->query_messages($this->project_id, $this->last_message_id); 

    // If there is a  status update or new message.
    if($messages || $status_change)
    break;

    usleep(1000000);
}
while(empty($messages) && empty($status_change));

echo json_encode(array("messages"=>$messages, "status"=>$status_change));
exit;
运行此操作时,服务器需要很长时间来处理任何请求,无论是GET、POST还是其他AJax请求。Iv还试图更改这两个代码集,但都没有用,只要其轮询时间长,服务器将需要很长时间来处理


这是我的错误,还是我想更改一些apache设置。在windows 8.1上使用xamp也尝试了wamp,但没有任何更改

,这要感谢steven。Ansewer直接取自php手册的源代码页 对于会话_write_close()

如果您愿意,您可以使用sleep()调试任何东西 您的会话仍处于活动状态。例如,生成 ajax请求,其中ajax请求轮询服务器端事件(和 可能不会立即返回)

如果ajax函数不执行session\u write\u close(),则 页面将显示为挂起,在新选项卡中打开其他页面将显示为挂起 也暂停


美国LEEP(1000000)@史蒂文:这应该会让剧本休息一秒钟,然后再重复一遍。为了节省cpu,mysql需要做一些工作。我试着去评论它没有什么区别,因为我仍然不会得到任何其他请求的回应,除非这张纸条有东西要归还,在这种情况下,所有其他请求都会立即通过。嗯,也许是这样的:@steven你毫无疑问是我在世界上最好的朋友RN。我永远欠你的债,谢谢你这么多:-)很简单。你自己的答案很好,所以我不需要写。