#javascript #ajax #asynchronous #frontend #backend
#javascript #ajax #асинхронный #интерфейс #серверная
Вопрос:
В моем проекте я выполняю ajax-вызов из интерфейса (React) в серверную часть (Laravel), используя axios. Есть много вещей, которые нужно сделать в серверной функции, и это занимает много времени. Я получаю сообщение об ошибке тайм-аута соединения всякий раз, когда я делаю вызов. Мне нужно получить результат серверного задания (успех, ошибка и т.д.). Каково наилучшее решение для выполнения этого требования? Заранее спасибо.
Комментарии:
1. Вы можете использовать ServerSentEvent (посмотрите на EventSource), длительный опрос (погуглите) или изменить время ожидания сервера.
2. Отправленное сервером событие было полезным инструментом. Это помогло мне улучшить пользовательский интерфейс благодаря обновлениям в реальном времени. Но это не решило проблему тайм-аута. Если выполнение функции обратного вызова класса StreamedResponse (Laravel) занимает более 60 секунд, сервер выдает PHP фатальную ошибку.
PHP Fatal error: Maximum execution time of 60 seconds exceeded in ... .php on line 52
. Может быть, изменениеmax_execution_time
значения — единственный способ?3. Вы должны использовать что-то вроде диспетчера задач. По завершении операции немедленно верните идентификатор задачи клиенту, прежде чем отправлять ответ с идентификатором задачи в качестве SSE. Если вы запускаете операцию как асинхронное задание, чтобы никогда не было тайм-аута, потому что сервер немедленно отвечает. Другим и более простым способом является длительный опрос, он похож на SSE, но вместо прослушивания события клиент постоянно запрашивает сервер, выполнена ли операция или нет в течение указанного периода времени, пока операция не будет выполнена.
4. Это подходящие способы обработки дорогостоящих задач.