Apache + PHP multiple scripts at the same time

半城伤御伤魂 提交于 2020-01-11 03:53:08

问题


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:


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!



来源:https://stackoverflow.com/questions/15288732/apache-php-multiple-scripts-at-the-same-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!