Reputation: 195
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.
Upvotes: 2
Views: 2559
Reputation: 5546
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!
Upvotes: 8