2012-01-21 9 views
1

私はさまざまなプロセス間で通信するためにソケットを使用しています。すべてが同じマシン上で実行されているので、パケットの損失はなく、読み取りタイムアウトなどもありません。通常、メッセージは小さなデータ(JSON、時にはバイナリ)です。今はクロスマシン通信。クライアントは、通常、次のようになります。クライアントはサーバーに何らかの処理を開始するように指示し(タスクの説明を渡す)、サーバーは作業を行い、進行状況を通信し、クライアントは任意で終了メッセージを送信することができます。セッションが終了すると、セッションが終了し、新しいタスクを開始すると新しいセッションが開始されます。シンプルで信頼性の高いネットワークメッセージングを行うにはどうすればいいですか?

通信はどのように実装すればよいですか。ネットワーク上でソケットを簡単に使用し続けることはできますが、メッセージが届かなかったときを識別して何らかの形でサーバーに返信するために、多くのエラー処理を追加する必要があります。私が望むのはちょうどsend(message, target)であり、完全なメッセージが送信されることを保証します。もう片方の側が死んだときに通知を加えます。私はzero-mqのようないくつかのライブラリがありますが、これはまさにそれを実現すると主張していますが、実際にそのようなメッセージングライブラリが必要かどうかはわかりません。いくつかの基本的なコミュニケーションのためにそこにいくつかのライブラリを使いやすいですか?

私はC++ & Pythonを使用しています。BSDスタイルライセンスは、ライブラリにとって確かに強く推奨されます。コミュニケーション部分は本当に重要なものではないので、図書館はかなり安定しているはずです。私は1つの解決策に固執したいと思います。

答えて

2

TCPすべてのpagackesが宛先に渡されることを保証します[しなかった場合は再送します]。だから、あなたがそれを使うならば、おそらくより多くの時間がかかるでしょうが、msgの送信の正確さは残っています。

+0

私はTCPに固執する限り、私は設定されていますか? – Anteru

+0

ネットワークが渋滞していて、何があってもmsgは到着しませんが、この場合、通過するために何もできません。それ以外は - はい、TCPでかなり設定されています。 – amit

+0

優秀、ありがとう! – Anteru

0

チェックアウトnetworkComms.netオープンソースのネットワーク通信ライブラリです。

0

メッセージキューが必要なようです。

ただ一つのRedisとなっている多くの、多くのソリューション、ありますhttp://redis.io

2

はあなたがZeroMQをチェックアウトする必要があります。純粋なBSDソケットよりもシンプルなインターフェースを持っています。より移植性があり、優れたドキュメントを持っています。

関連する問題