2014-01-21 4 views
4

Я использую Flask для разработки веб-сервера в приложении python. Я достигаю этого сценария: клиент (он не будет браузером) отправляет запрос, сервер выполняет некоторую длинную задачу в фоновом режиме и по завершении отправляет ответ обратно клиенту асинхронно. Можно ли это сделать?Колба: асинхронный ответ клиенту

+0

В вашем вопросе есть противоречие: ответ (HTTP), который отправляется ** по завершении ** задачи, по определению не является асинхронным. Вероятно, вы хотите использовать два запроса/ответы, один для запуска задачи, а другой для получения данных. AFAIK, нет никакого способа сделать это, используя чистый HTTP, хотя вы могли бы использовать шаблон публикации/подписки, используя PubSubHubbub, или, как предположил @GamesBrainiac, websockets – goncalopp

+0

Я думаю, что лучший способ сделать это - использовать веб-сокеты. –

+0

Но клиент не браузер ... Я думаю, что лучший способ сделать это - это не делать это таким образом ... –

ответ

4

То, что вы просите, не может быть выполнено с помощью протокола HTTP. Каждый запрос получает ответ синхронно. Ближайшая вещь для достижения того, что вы хотите, будет такой:

Клиент отправляет запрос, и сервер немедленно отправляет идентификатор задания, а также запускает фоновое задание для этого длительного вычисления.

Клиент может затем опросить сервер для статуса, отправив идентификатор задания в новый запрос. Ответ снова немедленный и содержит статус работы, такой как «в процессе», «завершено», «неудачно» и т. Д. Сервер также может возвращать процент прогресса, который клиент может использовать для отображения индикатора выполнения.

Вы также можете реализовать веб-сокеты, но для этого потребуется сервер и клиент сокета.

Смежные вопросы