Apache不会在投票时提供服务

时间:2014-11-13 05:22:22

标签: php mysql ajax apache long-polling

我在Windows 8.1机器上安装了Wamp,我正用于开发。我的问题是,当我运行正在进行轮询的脚本时,Apache不会在合理的时间内从我正在处理的特定Web应用程序中为我提供页面。这是脚本及其后端实现

window.fetch_messages = function () // I call this when my page is loaded
{
    var last_message = $("div.message:last").attr('data-ai_id');
    var project_id = getParameterByName('project-id'); // Another one of my helpers

    $.ajax({
            url:'project_messages',
            type:'POST',
            data:{ project_id:project_id, latest_message:last_message },
            timeout:50000,
            success:new_messages, 
            error:function(data){ console.log(data); setTimeout(fetch_messages(),50000); }
    });

};

后端

do
{
    $messages = $this->mentor_model->query_messages($this->project_id,$this->viewer, $this->last_message_id);

    if($messages)
    break;

    usleep(25000);
}
while(empty($messages));

echo json_encode($messages);
exit;

这一切都有效,但是如果apache没有响应我在其他页面或其他合理时间内要求的其他请求,我就无法正常工作。我在机器上有其他网络应用程序,它们在轮询时工作正常,但网络应用程序本身不会在合理的时间内响应其他请求,这只发生在我使用此脚本的页面上时。作为一个注释,我还确保mysql没有在这里通过访问使用mysql的localhost上的另一个wapp(压缩)来解决问题,并且它的响应很好。

什么是apache的交易?是否有一些设置或我需要改变的东西。它应该能够处理这个罚款,因为它只是我测试。

1 个答案:

答案 0 :(得分:1)

这不仅仅是资源处理问题。会话的全面使用被阻止,因为有问题的脚本在运行时不允许使用会话数据(因为它正在使用数据)。

在脚本上调用usleep()/ sleep()之前放置在循环中的简单session_write_close()解决了我的问题。

使用完会话数据后将它放在任何地方都可以解决问题。