分散プロセスが非同期で通信するための最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/632896

  •  08-07-2019
  •  | 
  •  

質問

私は、非同期のpub / subのような方法で、ネットワークを介して分散コンポーネントが互いに通信するアプリケーションを開発しています。

このため、ソケット経由でXMLを送信するというアイデアが気に入っています。非同期であり、サーバーは一切必要ありません。ローカルまたはネットワーク経由で動作できます。私自身のpub / subメカニズムをロールする必要がありますが、これはあまり面倒ではないでしょう-サブスクライバのIDとしてIPアドレスを使用できます。実装言語はC ++です。以前にこの方法を使用して、良い結果を得ました。しかし、もっと良い方法があるのだろうか?アドバイスを歓迎します。

編集:まだ決定していませんが、protobufに関するcparcodeのコメントに興味があります:

"ネットワーク通信にXMLを使用することの人気を理解できませんでした。いずれにせよ、プロトコルはあなたの問題の一部に過ぎないことを認識していますが、そのテーマにはGoogleのprotobufもあります。 http://code.google.com/p/protobuf/ – caparcode(3月11日1:01)"

役に立ちましたか?

解決

XMLを使用する代わりに、既存のメッセージパッシングフレームワークを使用することをお勧めします。 libt2n または d-bus

しかし、過去に独自のソケット実装を使用して良好な結果を得た場合、変更すべき理由はわかりません。壊れていない場合は修正しないでください:)

他のヒント

単なるソケットの代わりに、 AMQPのようなソリューションを検討する場合があります。

pub / subインターフェースでソケット接続を使用する場合、それは通常、ポイントツーポイント通信を意味し、常にスケーラブルなソリューションとは限りません。 AMQPは、この種のpub / sub問題に本当に対処しています。無料で、オープンソースで、動作します。

既にpub / subの問題を解決しているのであれば、自分でやるのではなく、彼らの仕事を活用したいかもしれません。

OpenAMQをお勧めします。

とはいえ、実際に作業している環境の種類によって異なります。AMQPでは、システム内のどこかでAMQPブローカー(メッセージのルーティングを行うアプリケーション)が実行されている必要があります。

ActiveMQ をご覧ください。これは JMS プロバイダーであり、他の多くの言語のバインディングもあり、いくつかのトランスポートで動作し、メッセージに使用するプロトコルの選択があります。

RabbitMQはAMQPブローカーでもあり、アダプターを使用して、XMPP、HTTP、STOMP、SMTPなどの他のプロトコルもサポートします。

特に以前にそれをやったことがあり、それでもあなたのニーズを満たしている場合は、それに従ってください。

アプリにウェブサーバーを埋め込む方法は? EasyHTTPD はオープンソースのC ++であり、非常に簡単に使用できます。非同期部分は簡単です。送信者または受信者で新しいスレッドを起動します。

XMLを探していて、クロスプラットフォームで起動する場合は、SOAPのようなXML-RPCメカニズムを検討できます(Linux上のCサーバーとwin32上のC ++クライアントとの通信にgSoapを使用しました。それをすべて理解したらうまくいきました)。

XMLにあまり傾倒しておらず、シンプルで効率的なものが必要な場合は、 YAMIを検討することを検討してください。 ライブラリ。使い方はかなり簡単で、指定されたリンクには、始めるのに十分なドキュメント、根拠、および例が含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top