私はXMPPを使用していますが、メッセージのコールバックはすべてのメッセージが送信されたときにアクティブになります。私の目的は、メッセージによって到着するデータをコールバック内のAPIに送信し、応答に基づいてXMPPクライアントを使用して何かを返すことです。RubyでAjaxのような非同期メソッドを呼び出す
- ユーザータイプのメッセージ(ブラウザチャットクライアント)が
- メッセージは
- メッセージが
- 応答がチャットクライアントに返送され
- レスポンスを受信したAPIに送信されるXMPPを介してサーバに到着します。
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へのリクエストは、ブロッキング呼び出しになりますので、これはアプリケーション全体のボトルネックになる可能性があることです。 私はJavascriptのためのAJAXのようなものを使用してリクエストを起動し、応答が利用可能なときにデータを送信することを好むでしょう。 Rubyでこれをどのように実装できますか?
私はdelayed_jobとbackgroundrbを見ましたが、それらは火災や忘れのためのツールのようです。私は応答と非同期の方法でコールバックをアクティブにする何かが必要になります。
私が望む非同期動作を実現する方法について、本当に本当に助けていただきたいと思います。私はRabbitMQのようなメッセージキューにも精通していますが、これはかなりの複雑さが増していると感じています。
驚くばかりです。多分これはそれです。 – Sid
私はこれがコンソールでは動作しますが、開発モードでアプリケーションで実行されたときにタスクをキューに追加しないことがわかります。 BTW私はdevモードで乗客とapacheを実行しています。 – Sid