Как эмулировать очередь для CGI-скрипта? - PullRequest
0 голосов
/ 21 марта 2011

В моем CGI-скрипте я делаю длинный (до 10 секунд) запрос к другому серверу, анализирую результаты и показываю ответ моему пользователю (через AJAX).Но другой владелец сервера просит меня выполнять каждый запрос не более 1 запроса в 10 секунд, поэтому:

  • мне нужно сохранить каждый запрос моего пользователя;
  • каждые десять секунд я могу сделать только один запрос к другому серверу;

Сначала я думаю о Cron, который откроет простой текстовый файл (файл очереди), прочитает первую строку и отправит егокак запрос к другому серверу.После этого он сохранит результат в другом файле (где я кеширую все результаты).Поэтому мой CGI сначала проверит файл кэша и попытается найти в нем результат, а затем (если результат не найден) сохранит задачу в файле очереди (для Cron).

Но Cron запускается только один раз в минуту, поэтому мой пользователь должен ждать так долго ...

Так, как я могу сделать это через CGI?

Может быть:

  1. После проверки файла кэша CGI оценит время для завершения запроса (путем чтения текущего файла очереди) и отправит это время оценки в HTML (где я могу получитьна этот раз и сделайте еще один запрос через это время через AJAX).
  2. После этого он сохранит запрос в файл очереди и разветвит.Разветвленный процесс будет ожидать до тех пор, пока его запрос не окажется в верхней части очереди, и отправит запрос другому серверу.

  3. После этого он сохранит результат в файле кэша.Что вы думаете?

Может быть, какой-то модуль уже написан для таких задач?

1 Ответ

1 голос
/ 21 марта 2011

Одним из вариантов является создание локального демона / службы (Linux / Windows), который обрабатывает отправку всех запросов на удаленный сервер.Ваш веб-сервис может общаться с этим демоном вместо удаленного сервиса, используя тот же протокол, за исключением частного порта / сокета.Демон может принимать запросы от веб-сервера / приложения и каждые десять секунд, если есть ожидающий запрос, он может отправить его на удаленный сервер, а при получении ответа он может переслать его обратно в сокет входящего запроса.Вы можете думать об этом демоне как о прокси-сервере, который просто добавляет функциональность очередей.Обратите внимание, что демону фактически не нужно анализировать ни входящий запрос, ни возвращаемые результаты;он просто перенаправляет биты в место назначения в каждом случае.Нужно только реализовать функции организации очередей и работы в сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...