3

Websocket を使用して Web アプリケーション用のリアルタイム API を開発することを楽しみにしています。このために、RabbitMQ をブローカーとして使用しています。バックエンドは Python (gevent + websocket) に基づいており、Pika/Puka を rabbitmq クライアントとして使用しています。

ここで私が直面している問題は、websocket を使用して rabbitMQ に接続する方法です。最初の Websocket 接続の確立後、ソケット オブジェクトはクライアントからの新しいメッセージを待ちます。rabbitMQ の場合、コンシューマーをセットアップする必要があるため、メッセージを受信したときにメッセージを処理します。このように捉えることができ、

  1. クライアントは、全二重 Websocket を介してサーバーとの接続を確立します。
  2. すべてのクライアントは、最初の websocket ハンドシェイク後に RabbitMQ のコンシューマーとして機能する必要があるため、クライアントがメッセージを受け取ると、すべてのクライアントが更新されます。
  3. 新しいメッセージが websocket に到着すると、そのクライアントはそれを RabbitMQ に送信するため、この時点でこのクライアントはパブリッシャーとして機能します。

問題は、Websocket が新しいメッセージを待機することと、RabbitMQ コンシューマーがそのチャネルで新しいメッセージを待機することです。これら 2 つのケースをリンクできませんでした。

これが間違った方法かどうかはわかりません...

このシナリオを実装する方法が見つかりません。間違った方法で行っている場合、または別の方法がある場合は、これを修正するのを手伝ってください。

ありがとうございました、

ハリダス N.

4

2 に答える 2

1

Tornado + websocket + RabbitMQ + Pika で同様の要件を実装しました。

これはすでに知られている方法だと思います。これが、この Web チャット アプリケーションの git リポジトリです。

https://github.com/haridas/RabbitChat

gevent/twisted で同様のことを行うのは、rabbitMQ クライアントが gevent/twisted のイベント ループをサポートできなかったため、非常に難しいようです。

ピカにはトルネードアダプターが付いているので、セットアップが簡単です。ツイスト アダプターにも取り組んでいる Pika 開発チーム。彼らがすぐにそれをリリースすることを願っています。

ありがとう、

ハリダス N.

http://haridas.in .

于 2011-07-27T06:17:09.113 に答える
0

簡単な解決策は、グリーンレット間の通信に gevent.queue.Queue インスタンスを使用することです。

于 2011-08-23T19:39:40.330 に答える