douyudouchao6779 2013-03-08 07:20
浏览 74

Apache + PHP同时使用多个脚本

Good day.

For first, sorry for my bad English =)

So. I created script:

<?
sleep(10);
?>

My Apache has MPM module, I obviously didn't use sessions in this script, just.. just sleep(10). When I open 2 tabs in my browser simultaneously, first tab loads in 10 seconds, second tab - 20 seconds.

But. When I open this script in 2 different browsers at the same time, it loads in each one after 10 seconds.

So, I started thinking, that my problem is "Connection: Keep-Alive". I changed my script:

<?
  header('Connection: close');
  phpinfo();
  sleep(10);
?>

phpinfo() - to be sure, that headers were sent before sleep(). Buuuut... I meet the same problem. In first tab of Chrome I get headers with "Connection: close", in second tab I can't get response headers while first script is not ended. In two different browsers - everything is normal.

And now I have absolutely no ideas what I'm doing wrong. Why Chrome can't make 2 parallel queries to my site? What I should do to solve this problem?

P.S. I don't want to disable keep-alive for all my site. I don't mind, if it will speed up loading of css, images and other stuff. Even other scripts. But I want to have ability to run some scripts parallel in one browser. P.P.S. For example: at the one page will be very long ajax query, for example - processing some big data at server-side and ajax queries with some little interval - to get status of executing first query. Obviously, that they must be parallel.

  • 写回答

1条回答 默认 最新

  • douan3019 2016-07-12 16:41
    关注

    I know it's an old question but I just had the same problem and solved it with session_write_close()! Without it PHP purposely queues scripts for same session.

    Simplest possible example:

    Looong Script #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!
    }
    
    ?>
    

    Short script #2:

    <?php
    session_start();
    print_r($_SESSION['progress']);
    ?>
    

    Now try it, open first script that takes ages open second script in new tab and get the progress updated in a blink while first still running!! So easy right?! ;)

    Same principle for ajax polling long script and second ajax call to get the progress!

    评论

报告相同问题?

悬赏问题

  • ¥15 在hololens1上运行unity项目只有空窗口
  • ¥25 TABLEAU PREP无法打开
  • ¥15 关于#c语言#的问题:求完整代码条件好说
  • ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败
  • ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)
  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图