轮询Apache服务器没有响应

时间:2014-11-26 17:50:17

标签: 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_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而没有改变

1 个答案:

答案 0 :(得分:2)

感谢史蒂文。 Ansewer直接从php手册页的源头 对于session_write_close();

  

如果有的话,你可以通过sleep()调试任何有趣的乐趣   你的会话仍然有效。例如,一个页面   ajax请求,其中ajax请求轮询服务器端事件(和   可能不会立即返回。)

     

如果ajax函数没有执行session_write_close(),那么你的外   页面将显示为挂起,并在新选项卡中打开其他页面   也失速了。