Slavenin999
@Slavenin999
программист php/erlang/elixir/js

Как отправить несколько ajax запросов одновременно к symfony?

Доброго времени суток!

Есть в общем-то простая задача. При формировании документа показать прогресс его формирования. Для реализации сделал сохранение текущего статуса в редиску и проверку его с клиента.

Т.е первым отправляется ajax-запрос на формирование документа, а далее через интервал производится опрос хранилища на предмет готовности. Но тут возникла неожиданная проблема. После отправки запроса за документом, все остальные дружно встают в очередь и ждут пока выполнится первый...

37e5898e3489_001.png

Может надо где-то в конфиге что-то подправить?

PS: ковыряния в логе подтвердили мою мысль, симфони ставит все ответы в очередь и ждёт пока завершится первый запрос, а затем возвращает остальные, т.е kernel.response вызывается для запросов проверки статуса только после завершения основного запроса...
  • Вопрос задан
  • 436 просмотров
Решения вопроса 1
@dizzy7
Проблема не в симфонии, это стандартный механизм php сессий - они блокируются. Пока в одном потоке открыта сессия - другой поток не может её открыть и ждёт завершения. Вам необходимо либо реализовать своё хранилище сессий без блокировок, либо закрывать сессию вручную, если она вам не нужна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
e_svirsky
@e_svirsky
Web Developer
У вас документ формируется синхронно и вы хотите еще статус показывать, я правильно понял?
Такие вещи лучше на бэкграунд повесить. Тогда не будет проблем с сессиями. Таска выполняется в бэкграунде, и меняет редис, а вы с редиса на фронтенде показываете статус. Так будет красиво и правильно. И если вдруг вырастет время формирования документа - вам пофигу, потому что команда будет выполняться в бэкграунде и вы не вылетите по http request timeout.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы