php - Apache 不会在轮询时提供服务

标签 php mysql ajax apache long-polling

我在用于开发的 Windows 8.1 机器上安装了 Wamp。我的问题是,在我运行执行轮询的脚本时,Apache 不会在合理的时间内为我提供来 self 正在处理的特定 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 的另一个 wapp(coining)来确保 mysql 没有在此处出现问题,并且它响应良好。

apache 的交易是什么?有什么设置或我必须改变的东西吗?它应该能够很好地处理这个问题,因为它只是我测试的。

最佳答案

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

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

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

关于php - Apache 不会在轮询时提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901862/

相关文章:

php - SQL 查询不起作用,store_result 使执行崩溃

PHP - 替换多维数组中的数据,特定键

javascript - 将事件绑定(bind)到 ajax 加载的内容

javascript - 如何避免多次发送表单

javascript - 在 jQuery 中使用 JSON 变量来显示更多 JSON 变量

php - 如何: MySQL order by user_id (RAND) with pagination

javascript - 用于 PhantomJS + Highcharts 的 Javascript 中的 PHP

php - 如何用一个序列化数据连接两列?

mysql - 按没有子查询的最大时间分组

mysql - AWS Aurora 迁移; MySQL 分区表无法恢复