Какой хороший способ связать модель синхронного http-запроса / ответа с моделью на основе асинхронной очереди?
Когда приходит HTTP-запрос пользователя, он генерирует рабочий запрос, который попадает в очередь ( beanstalkd в данном случае). Один из работников принимает запрос, выполняет работу и готовит ответ.
Модель очереди не является запросом / ответом - есть только запросы, а не ответы. Итак, вопрос в том, как лучше всего получить ответ обратно в мир HTTP и обратно пользователю?
Идеи:
Beanstalkd поддерживает легкие темы или очереди (они называют их трубами). Мы могли бы создать канал для каждого запроса, попросить работника создать сообщение на этом канале и заставить процесс http сидеть и ждать в канале ответа. Не особенно нравится этот, так как у него есть процессы apache, занимающие память.
Проведите опрос http-клиента для получения ответа. Первоначальный HTTP-запрос пользователя запускает задание в очереди и немедленно возвращается. Клиент (браузер пользователя) периодически запрашивает ответ. На бэкэнде рабочий помещает свой ответ в memcached, и мы подключаем nginx к memcached, чтобы опрос был легким.
Использование Комета . Аналогично второму варианту, но с более изящным http-соединением, чтобы избежать опроса.
Я склоняюсь к 2, поскольку это легко и хорошо известно (я еще не использовал комету). Я предполагаю, что, вероятно, есть и гораздо более очевидная модель, о которой я не думал. Что ты думаешь?