Как справиться с отнимающими много времени внутренними задачами в вызове ajax

#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. Это подходящие способы обработки дорогостоящих задач.