2011-06-16 35 views
0

すべてのクライアントがTCP(クライアントごとにTcpClient + TcpListener)を使用して互いに通信するクライアントサーバーアプリケーションがあります。TcpClient - 私はそれを置き換えることができますか?

したがって、クライアントAが何かを実行すると、クライアントB、C、応答を待ちます。これは、多くのクライアント(今の20のような)で遅くなってしまいます。特に、クライアントBが死ぬと、クライアントAはタイムアウトまで待ちます。

もっと良い方法があれば誰もが同じ時刻にパッケージをブロードキャストできますか?私は皆さんのホスト名などを知っています。

メッセージを送信し、正常に受信したかどうかを知る必要があります。

私のオプションは何ですか?

答えて

1

私は戦略を完全にオフにし、信頼性とパフォーマンスのチューニング方法でこれを行うメッセージバスを使用することをお勧めします。私はActiveMQに満足しています。たとえそれがJavaで実装されていてもworks in C# very easilyです。純粋な.NETが必要な場合は、NServiceBusまたはRhino Service busをご覧ください。私はあなたがおそらく、クライアント間のメッセージを派遣する作業が簡単であり、自分でそれを行うことができると感じていることを知っています。これは、アプリケーションが顧客サイトで実行されているときに通信のバグを解決しようとすると非常にイライラします。競合他社のメッセージバスを書く場合はこれを無視してください:) これらのソリューションはすべて、ドキュメントを読むだけで作業を完了させることができます。必要な信頼性を得るために生産コードを置き換える前に、いくつかのテストアプリを「インビトロ」で実行してから、ハードTcpClientを置き換えてください。私は、メッセージストラテジを配置するメッセージデータグラムだけを孤立させるためにトランケートポイントを見つけることができると確信しています。

+0

すべてのクライアントがWindowsを実行している場合は、OSの(オプションの)一部であるMSMQを使用できます。 –

+0

@Colin Desmondはい、これは当てはまりますが、MSMQキューは単にFIFOであり、ディスパッチ戦略(ブロードキャスト)を作成するためには何らかの努力が必要です。 –

+0

私はあなたが言っていることを見ています。この時点ではアプリはサポートモードのみであるため、変更は最小限に抑える必要があります。そして、私は間違いなくサーバーインフラストラクチャを追加したくありません。 – katit

0

マルチキャストプロトコルを使用すると、1つのパケットをグループに送信するだけで済みます。

+0

正確にマルチキャストプロトコルと.NETの例について詳しく教えてください。 – katit

関連する問題