1

Tornado を Web サーバーとして使用しています。サーバー ハードウェアで実行される Python でいくつかのデーモンを作成します。Web サーバーがデーモンにデータを送信し、計算結果を受け取る必要がある場合があります。2 つの動作があります: 1. 非同期モード: サーバーはデータをデーモンに送信しますが、すぐに結果を必要としません。メッセージキューを使用して完全に実行できますか? 2. 同期モード: サーバーはデータをデーモンに送信し、結果を取得するまで待機します。ソケットを使用する必要がありますか?

では、tornado と Python ベースのデーモンとの間の通信の最良の方法は何ですか?

4

2 に答える 2

1

この目的には、ZeroMQを使用できます。さまざまな目的のためのさまざまなソケットがあり、ボトルネックにならないほど高速です。非同期の場合は DEALER/ROUTER ソケットを使用でき、厳密な同期モードの場合は REQ/REP ソケットを使用できます。

これには python バインディングを使用できます --> http://www.zeromq.org/bindings:python

非同期モードの場合、zguide の章 3 Router-to-dealer async routingから次のようなことを試すことができます。

あなたの場合、図の「クライアント」はWebサーバーになり、デーモンは「ワーカー」になります。

zguide ルーター ディーラー 非同期ルーティング


同期の場合は、単純な要求応答ブローカーまたは必要に応じたバリアントを試すことができます。

シンプルなリクエスト・リプライ・ブローカー

上の図は、REQ/REP ソケットでの send/recv の厳密な同期サイクルを示しています。zguide リンクを読んで、その仕組みを理解してください。また、ページには python コード スニペットもあります。

于 2012-05-19T16:49:09.040 に答える
0

規模にもよりますが、単純なことは、Tornado で HTTP と AsyncHTTPClient を使用することです。このアプリケーションのリクエスト<->レスポンスのケースでは、このようなアプローチで毎秒 300 接続になります。

最初のケースでは、ファイア アンド フォーゲットの場合、AsyncHTTP を使用して、サーバーが接続を閉じて作業を続行することもできます...

于 2012-05-19T18:13:30.740 に答える