【问题标题】:Apache wont serve while polling轮询时Apache不会服务
【发布时间】:2015-01-10 04:25:04
【问题描述】:

我在用于开发的 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 没有响应我在合理时间内转到另一个页面或其他内容的其他请求,我将无法正常工作。我的机器上有其他 Web 应用程序,它们在轮询时可以正常工作,但是 Web 应用程序本身不会在合理的时间内响应其他请求,而且只有当我在使用此脚本的页面上时才会发生这种情况。作为说明,我还通过访问 localhost 上使用 mysql 的另一个 wapp(coining) 来确保 mysql 没有在这里给出问题,并且它响应良好。

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

【问题讨论】:

  • 有人吗?我试过同时更换后端和前端,似乎只要后端脚本在一段时间内执行一些循环,服务器就不会响应我在同一域上的其他 http 请求

标签: php mysql ajax apache long-polling


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2015-04-08
    • 2013-11-11
    • 2014-08-24
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多