6

Pythonで相互に通信する2つのアプリケーションを作成したいと思います。これらのアプリケーションの1つはサーバーのように動作し、もう1つはクライアントのGUIである必要があります。それらは、同じシステム(同じマシン上)またはリモートで異なるデバイス上で実行できます。

サーバー(または)やZeroMQRabbitMQのようなAMQPメッセージング(のような)とそれにアプリケーションを接続するために、どのテクノロジーを使用すべきかをお聞きしたいと思います。将来的には何らかの認証などをしたいと思っています。TwistedTornado

私は本当にたくさんの質問や記事を読みました(このようなもの:なぜrabbitmqを使用する必要があるのですか)、そして多くの人々が「rabbitmqとtwistedは違う」と言っています。私は彼らがそうであることを知っています。この場合、違いと、これらのソリューションの1つが他のソリューションよりも優れている理由を知りたいと思います。

編集: 次の要件で使用したい:

  1. 一度に複数のユーザーが接続されます-同じプログラムに接続されているユーザーは1〜10人で、共同作業を行うと思います
  2. 送信されるデータは、ユーザーが何をしたかを伝える「メッセージ」です。リモート呼び出しのようなものです(ただし、GUIはさまざまな言語で記述できるため、メッセージはjson情報のようなものになるため、これに焦点を当てないでください)。
  3. システムは共同作業を可能にする必要があります-したがって、可能な限りインタラクティブである必要があります。(データは、ユーザーが何かを入力したり、何らかのアクションを実行したりすると、常に送信されます)。

さらに、この特定の場合だけでなく、なぜ一方のソリューションが他方よりも優れているのかを聞きたいと思います。

4

2 に答える 2

10

Twistedは、 Reactor Patternを介して非同期ネットワークを提供することにより、C10kネットワークの問題を解決するために使用されます。Pythonでのスレッド化/並行性はErlangのように簡単ではないため、並行性の抽象化が優れているため、便利です。その結果、一部の人々はTwistedを使用して作業タスクをディスパッチしますが、それは設計されたものではありません。

RabbitMQは、メッセージキューパターンに基づいています。そのすべては信頼できるメッセージパッシングに関するものであり、ネットワーキングに関するものではありません。メッセージパッシング(pub / subとも呼ばれます)を提供するさまざまな非同期ネットワークフレームワーク(Vert.xなど)が多数あるため、信頼できる部分を強調します。

多くの場合、ほとんどの人は2つのパターンを組み合わせて「メッセージバス」を作成します。この「メッセージバス」は、不要なネットワークブロッキングなしで、優れた統合とスケーラビリティのために、さまざまなネットワークニーズに対応します。

「メッセージキュー」がネットワーキングの「reactorloop」と非常によく合う理由は、reactorループでブロックしてはならないため、ブロック作業を他のプロセス(スレッド、lwp、個別のマシンプロセス、キューなど)にディスパッチする必要があるためです。..)。実際には、これを行う最もクリーンな方法は、分散メッセージパッシングです。

要件に基づいて、結果を即座に表示してスケーリングする場合は非同期ネットワークを使用する必要があるように思われますが、クライアントが少数しかない場合は、ポーリングするだけの単純なシステムで解決できる可能性があります。では、問題は合計ユーザー数(ツイスト)ですか?また、更新を配信する信頼性はどの程度ですか(RabbitMQ)?最後に、アーキテクチャを言語やプラットフォームに依存しないようにしますか...後でNode.jsを使用したい場合があります(非同期ネットワークではなくメッセージキューに焦点を当てます...つまりRabbitMQ)。個人的には、Pythonで記述できるVert.xを見てみます。

于 2013-02-05T19:46:55.727 に答える
1

Twisted と RabbitMQ が違うと誰かが言っているのは、両方を比較することは、2 つのものを異なるターゲットで比較するようなものだからです。

Twisted は Tornadao のような非同期フレームワークです。RabbitMQ はメッセージ キュー システムです。それぞれを単純に比較することはできません。

質問を 2 つの新しい質問に変える必要があります。最初の質問は、プロセスを伝えるためにどのプロトコルを使用する必要がありますか? 答えは、amqp、Protocol Buffers などの言葉で理解できます...

もう1つは、クライアントとサーバーのプログラムを作成するためにどのフレームワークを使用すればよいですか? ここでの答えは、Twisted、Tornado などに当てはまります。

于 2013-02-05T16:15:12.627 に答える