Во-первых, я совершенно новичок во многих вещах, поэтому я буду рад любому вкладу, включая предложения, существующие проекты, существующие модели и т. д.
Мои текущие проблемы:
Фоновая служба поддерживает очередь задач. Фоновая служба написана на C++ или Python.
Когда клиент нажимает кнопку «Создать задачу» в браузере, информация будет отправлена на веб-сервер, а сценарий веб-сервера (написанный на PHP) инициирует вызов RPC к фоновой службе, чтобы добавить задачу во внутреннюю очередь.
Браузер клиента инициирует запрос AJAX, чтобы дождаться завершения задачи. Запрос AJAX будет удерживаться до тех пор, пока задача не будет завершена (или завершится сбоем) или клиент не отменит запрос.
Таким образом, мне нужен недорогой способ получить ход выполнения задачи, который запускается в фоновом сервисном процессе.
Я могу думать о двух способах:
Фоновая служба может заблаговременно информировать AJAX-скрипт сервера о ходе выполнения. Это низкая стоимость, но я на самом деле не знаю, как это сделать. Предоставляет ли какой-либо фреймворк RPC такой асинхронный обратный вызов? В настоящее время я решил использовать платформу RPC Thrift из-за ее многоязычной поддержки.
Сценарий AJAX на стороне сервера будет выполнять вызов RPC для получения текущего прогресса каждые несколько секунд, а в промежутках будет спать. По завершении сценарий AJAX вернется, в противном случае он просто позволит клиентскому браузеру подождать, не возвращаясь. Это на самом деле проще, но я не уверен в его стоимости. Обратите внимание, что задержка здесь для меня не проблема, потому что я полагаю, что клиенты могут подождать еще несколько секунд.
Есть ли какой-либо общий способ/модель решения этой проблемы?
Спасибо за помощь.