【发布时间】:2015-11-07 00:46:47
【问题描述】:
我正在尝试让 php 脚本的两个实例同时运行。我有一个脚本,'test.php':
<p><?php echo time(); ?> Sleeping...</p>
<?php sleep(5); ?>
<p><?php echo time(); ?> done</p>
如果我同时在两个浏览器选项卡中加载页面,我会得到:
1446855680 睡觉...
1446855685 完成
还有这个:
1446855686 睡觉...
1446855691 完成
一个实例阻塞,直到另一个实例加载。这在 Firefox 和 Chromium 上都会发生。
如果我制作第二个相同的脚本“test2.php”,或者将两个 url 重写为同一个脚本,并将两个页面加载到不同的选项卡中,我会得到:
1446855862 睡觉...
1446855867 完成
还有这个:
1446855863 睡觉...
1446855868 完成
两个实例同时加载。因此,被阻止的是相同的 URL。
如何让具有相同 URL 的脚本的两个实例同时加载/运行?
【问题讨论】:
-
由于我在您的脚本中没有看到任何实际同步,您是否检查过它不是浏览器优化(您是否尝试在 Firefox 中加载一个实例,在 chrome 中加载另一个实例?)。如果是浏览器优化,请尝试在页面加载时添加一个随机参数 (
?random=123)(具有 不同 值),看看会发生什么。 -
这不是关于 php 的行为,而是关于浏览器的行为。 firefox 和 Chrome/-ium 都按顺序对完全相同的 url 执行(可缓存的)请求。
-
@ted 该页面将在 Firefox 和 Chromium 中同时加载。 random 参数还允许它同时加载。
-
@VolkerK 有没有办法告诉浏览器页面在加载之前不能缓存?我试过
header("Cache-Control: no-cache, must-revalidate"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); flush();但没用 -
@Fred-ii- 它在远程服务器上。在两种浏览器(Chromium 和 Firefox)上,当在不同的选项卡/窗口(相同的 URL、相同的浏览器、不同的窗口)中加载相同的 url 时,一个实例总是在下一个实例开始之前完成。
标签: php apache firefox chromium