我正在开发一个需要无休止的 ajax 请求的项目。当有数据要发送时,请求被服务器停止。
为了简化测试,我做了一个示例来模拟问题:
<?php
// Close (and disable) session to avoid lock
session_start();
session_write_close();
echo '<pre>';
do {
echo time() . "\n"; ob_flush(); flush();
error_log($_GET['id'] . ' - ' . time());
usleep(2000000); // sleep 2s to unload the CPU
} while (1);
在 Chrome 上,加载此页面将每两秒显示一次新的时间戳。在 Firefox 上,什么都不会显示,这就是为什么我放一个error_log
.
如果我打开脚本 6 次,一切正常。但是,如果我再打开一次,新标签页什么也不显示,并等待一个进程停止。使用私人模式或其他浏览器,我可以调用脚本 6* 次。
似乎 Apache 或 PHP 限制为每个客户端/会话 6 个连接。任何想法?
编辑:
看来,这是浏览器的限制:https ://stackoverflow.com/a/985704/3036602 有人知道如何避免这种限制吗?
编辑2:在网上搜索后,我发现我不是唯一一个遇到这个问题的人。我没有找到任何简单的解决方案。我发现了两个: - Facebook 方法:每个选项卡使用不同的子域。此解决方案要求拥有特定的 Web 服务器和 DNS。- 本地存储:只允许一个选项卡发出请求。这个解决方案还不错,但需要一些工作 - 本地存储:禁止多个标签(最简单的解决方案,但不是很性感)