JavaScript явно ожидает каждого вызова AJAX перед отправкой другого в цикле - PullRequest
0 голосов
/ 16 июня 2010

Прямо в точку: У меня есть этот JavaScript:

for(item=1;item<5;item++)
{
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET",'zzz.php', true);
    xmlhttp.send();
}

А в PHP-файле что-то вроде этого:

usleep(5);die('ok');

Теперь проблема в том, что javascript, похоже, ожидает завершения каждого вызова ajax перед отправкой другого. Таким образом, первый ответ возвращается через ок. 5 секунд, затем через 10 секунд и т. Д.

Это очень упрощенная версия того, что я делаю, поскольку настоящий скрипт предполагает использование cURL в PHP и jQuery в качестве JS lib. Но проблема остается той же.

Почему ответы возвращаются через 5 секунд?

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

Если вы используете сеансы в вашем PHP, то последующие запросы будут «удерживаться» до тех пор, пока не будет снята блокировка файла сеанса, либо путем завершения предыдущего скрипта, удерживающего блокировку, либо явным вызовом session_write_close () внутри этот сценарий. Это создает видимость того, что сервер выполняет только один запрос, и может быть вашей проблемой.

1 голос
/ 16 июня 2010

Все пять запросов, вероятно, не будут обрабатываться одновременно, потому что в стандарте HTTP конкретно указано, что вы гарантированно имеете только два одновременных подключения к серверу в любое время (хотя большинство браузеров имеют более высокий предел, поэтому они могут попробоватьиметь около 4-8 соединений).Если вы превысили предел, превышающий единицу, это вероятное узкое место.

...