分散プロセスが非同期で通信するための最良の方法は何ですか?
質問
私は、非同期のpub / subのような方法で、ネットワークを介して分散コンポーネントが互いに通信するアプリケーションを開発しています。
このため、ソケット経由でXMLを送信するというアイデアが気に入っています。非同期であり、サーバーは一切必要ありません。ローカルまたはネットワーク経由で動作できます。私自身のpub / subメカニズムをロールする必要がありますが、これはあまり面倒ではないでしょう-サブスクライバのIDとしてIPアドレスを使用できます。実装言語はC ++です。以前にこの方法を使用して、良い結果を得ました。しかし、もっと良い方法があるのだろうか?アドバイスを歓迎します。
編集:まだ決定していませんが、protobufに関するcparcodeのコメントに興味があります:
"ネットワーク通信にXMLを使用することの人気を理解できませんでした。いずれにせよ、プロトコルはあなたの問題の一部に過ぎないことを認識していますが、そのテーマにはGoogleのprotobufもあります。 http://code.google.com/p/protobuf/ – caparcode(3月11日1:01)"
他のヒント
単なるソケットの代わりに、 AMQPのようなソリューションを検討する場合があります。
pub / subインターフェースでソケット接続を使用する場合、それは通常、ポイントツーポイント通信を意味し、常にスケーラブルなソリューションとは限りません。 AMQPは、この種のpub / sub問題に本当に対処しています。無料で、オープンソースで、動作します。
既にpub / subの問題を解決しているのであれば、自分でやるのではなく、彼らの仕事を活用したいかもしれません。
とはいえ、実際に作業している環境の種類によって異なります。AMQPでは、システム内のどこかでAMQPブローカー(メッセージのルーティングを行うアプリケーション)が実行されている必要があります。
RabbitMQはAMQPブローカーでもあり、アダプターを使用して、XMPP、HTTP、STOMP、SMTPなどの他のプロトコルもサポートします。
特に以前にそれをやったことがあり、それでもあなたのニーズを満たしている場合は、それに従ってください。
アプリにウェブサーバーを埋め込む方法は? EasyHTTPD はオープンソースのC ++であり、非常に簡単に使用できます。非同期部分は簡単です。送信者または受信者で新しいスレッドを起動します。
XMLを探していて、クロスプラットフォームで起動する場合は、SOAPのようなXML-RPCメカニズムを検討できます(Linux上のCサーバーとwin32上のC ++クライアントとの通信にgSoapを使用しました。それをすべて理解したらうまくいきました)。
XMLにあまり傾倒しておらず、シンプルで効率的なものが必要な場合は、 YAMIを検討することを検討してください。 ライブラリ。使い方はかなり簡単で、指定されたリンクには、始めるのに十分なドキュメント、根拠、および例が含まれています。