Apache + PHP同时使用多个脚本

Dan*_*nov 2 php apache parallel-processing ajax

美好的一天.

首先,抱歉我的英语不好=)

所以.我创建了脚本:

<?
sleep(10);
?>
Run Code Online (Sandbox Code Playgroud)

我的Apache有MPM模块,我显然没有在这个脚本中使用会话,只是...只是睡觉(10).当我同时在浏览器中打开2个选项卡时,第一个选项卡在10秒内加载,第二个选项卡加载 - 20秒.

但.当我在两个不同的浏览器中同时打开此脚本时,它会在10秒后加载到每个浏览器中.

所以,我开始思考,我的问题是"连接:保持活力".我改变了我的脚本:

<?
  header('Connection: close');
  phpinfo();
  sleep(10);
?>
Run Code Online (Sandbox Code Playgroud)

phpinfo() - 可以肯定的是,标题是在sleep()之前发送的.Buuuut ......我遇到了同样的问题.在Chrome的第一个标签中,我使用"Connection:close"获取标题,在第二个标签中,当第一个脚本未结束时,我无法获得响应标头.在两个不同的浏览器中 - 一切正常.

而现在我完全没有想到我做错了什么.为什么Chrome无法对我的网站进行2次并行查询?我应该怎么做才能解决这个问题?

PS我不想为我的所有网站禁用keep-alive.我不介意,如果它会加快css,图像和其他东西的加载.甚至其他脚本.但我希望能够在一个浏览器中并行运行一些脚本.PPS例如:在一个页面上将是非常长的ajax查询,例如 - 在服务器端处理一些大数据和用一些小间隔处理ajax查询 - 以获得执行第一个查询的状态.显然,它们必须是平行的.

ant*_*oni 6

我知道这是一个老问题,但我遇到了同样的问题并解决了它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!
}

?>
Run Code Online (Sandbox Code Playgroud)

短脚本#2:

<?php
session_start();
print_r($_SESSION['progress']);
?>
Run Code Online (Sandbox Code Playgroud)

现在尝试一下,打开第一个脚本,在新选项卡中打开年龄开放的第二个脚本,并在第一个仍然运行时立即更新进度!! 这么容易吗?!;)

ajax轮询长脚本和第二个ajax调用的原理相同,以获得进度!