Я работаю с XMPP, и у меня есть обратный вызов сообщения, который активируется в случае каждого отправляемого сообщения.Моя цель состоит в том, чтобы отправить данные, поступающие с помощью сообщения, в API в рамках функции обратного вызова и на основе ответа отправить что-либо обратно с помощью клиента XMPP.
- Сообщение типа пользователя (Browser Chat Client)
- Сообщение поступает на сервер через XMPP
- Сообщение отправляется API
- Ответ получен
- Ответ отправляется обратно клиенту чата.
Мой код для этого выглядит следующим образом
admin_muc_client.activate_message_callbacks do |m|
sender = m.from.resource
room_slug = m.from.node
message = m.body
r = HTTParty.get('http://example.com/api/v1/query?msg=message')
Rails.logger.debug(r.inspect)
admin_muc_client.send_message("Message #{r.body}") if m.from.resource != 'admin'
end
Меня беспокоит то, что, поскольку обратный вызов является четным, а запрос к API будет блокирующим вызовом, это может стать узким местом для всегоприложение.Я бы предпочел использовать что-то вроде AJAX для Javascript, которое будет запускать запрос и, когда ответ будет доступен, отправлять данные.Как я могу реализовать это в Ruby?
Я посмотрел на delayed_job и backgroundrb, которые выглядят как инструменты для операций fire и Забыли.Мне нужно что-то, что активирует обратный вызов в асинхронном режиме с ответом.
Я был бы очень признателен за помощь в достижении асинхронного поведения, которое я хочу.Я также знаком с очередями сообщений, такими как RabbitMQ, которые, по моему мнению, были бы добавлением значительной сложности.