В веб-приложении, взаимодействующем с одним сервером, существует вызов jQuery Ajax со сценарием PHP, выполнение которого занимает около 20 секунд.
$(document).ready(function() {
$.ajax({
type: 'POST',
dataType: 'json',
url: 'createPDF.php',
data: str,
success: function(response) {
showPDF(response);
}
error: function() {
console.log('ERROR WHEN CREATING PDF');
}
});
});
Тем временем пользователь просит приложение получить список (getList.php) через другой jQuery Ajax, независимый от createPdf.
$(document).ready(function() {
$.ajax({
type: 'POST',
dataType: 'json',
url: 'getList.php',
data: str,
success: function(response) {
showList(response);
}
error: function() {
console.log('ERROR WHEN GETTING LIST');
}
});
});
Проблема в том, что getList.php начинает выполняться только после завершения createPDF.php.
Приложение работает с сеансами, и тесты проводились на отдельных клиентах, и в этом случае оба запроса выполняются параллельно, но на одном компьютере они не работают.
В этом случае, как запустить оба запроса параллельно?
Спасибо
В основном происходит то, что на вашем сервере файл сеанса блокируется первым скриптом, например, saveFiles
, После того, как этот скрипт завершил свою задачу, сеанс снова разблокируется. К сожалению ваш скрипт getList
хочет получить доступ к тому же сеансу, так как он заблокирован, getList
придется подождать, пока он не будет разблокирован.
Одним из решений для этого является позвонить session_write_close()
после того, как вся запись в данные сеанса будет выполнена, это приведет к тому, что файл сеанса будет разблокирован и использован следующим сценарием. Этот звонок, очевидно, должен произойти как можно скорее после session_start()
минимизировать время ожидания для других запросов.
Для более подробного объяснения взгляните на https://stackoverflow.com/a/6933294/2442804
Других решений пока нет …