美好的一天.
首先,抱歉我的英语不好=)
所以.我创建了脚本:
<?
sleep(10);
?>
我的Apache有MPM模块,我显然没有在这个脚本中使用会话,只是…只是睡觉(10).
当我同时在浏览器中打开2个选项卡时,第一个选项卡在10秒内加载,第二个选项卡加载 – 20秒.
但.当我在两个不同的浏览器中同时打开此脚本时,它会在10秒后加载到每个浏览器中.
所以,我开始思考,我的问题是“连接:保持活力”.我改变了我的脚本:
<?
header('Connection: close');
PHPinfo();
sleep(10);
?>
PHPinfo() – 可以肯定的是,标题是在sleep()之前发送的. Buuuut ……我遇到了同样的问题.在Chrome的第一个标签中,我使用“Connection:close”获取标题,在第二个标签中,当第一个脚本未结束时,我无法获得响应标头.在两个不同的浏览器中 – 一切正常.
而现在我完全没有想到我做错了什么.为什么Chrome无法对我的网站进行2次并行查询?我应该怎么做才能解决这个问题?
附:我不想为我的所有网站禁用keep-alive.我不介意,如果它会加快css,图像和其他东西的加载.甚至其他脚本.但我希望能够在一个浏览器中并行运行一些脚本.
P.P.S.例如:在一个页面上将是非常长的ajax查询,例如 – 在服务器端处理一些大数据和用一些小间隔处理ajax查询 – 以获得执行第一个查询的状态.显然,它们必须是平行的.
解决方法:
我知道这是一个老问题,但我遇到了同样的问题并用session_write_close()
解决了它!
没有它,PHP会故意为同一个会话排队脚本.
最简单的例子:
Looong脚本#1:
<?PHP
$_SESSION['progress'] = 0;
for ($i=0; $i < 100; $i++)
{
session_start();
$_SESSION['progress']++;
session_write_close();
sleep(1);// This is slowing script purposely!
}
?>
短脚本#2:
<?PHP
session_start();
print_r($_SESSION['progress']);
?>
现在尝试一下,打开第一个脚本,在新选项卡中打开年龄开放的第二个脚本,并在第一个仍然运行时立即更新进度!!这么容易吗?!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。