2009-06-24 14 views
0

トピックのパブリッシュとサブスクライブを行うクライアント/サーバーアプリケーションを作成しています。 私は、このプロジェクトのアーキテクチャと実装に関するいくつか質問があります。トピックのパブ/サブシステムの作成

最初にC#(.NET 3.5)を使用し、明示的にRaw Sockets/AIO/Threadsを使用します(最初はWCFなしでサーバとクライアントを自分のニーズに合わせて調整したい) 。クライアントは主にトピックを購読しますが、時にはサーバーにコマンドを送信し、データを公開することさえあります。いくつかのクライアントは出版社だけでもよい。

  1. あなたは私のサーバーの 基本的なビルディング・ブロック( クライアントあたりのスレッド、IOCP、....)でなければならどう思いますか。

  2. クライアントが サーバにパブリッシュ/サブスクライブ 話題を聞いて、コマンドを送信するために同じ NetworkStreamを使用する必要がありますか?データを待つ方法と同じ 同じスレッドで行う必要があります ストリームに同時にデータを書き込みますか?

(サンプルコードが認識されるであろう:))

+0

なぜホイールを改造するのですか?なぜMSMQ( 'System.Messaging')を使用しないのですか?あるいは[CodeMesh](http://www.codemesh.com/products/jmscourier/examples/topic_pub_cs.html)のようなもの? トロールするつもりはない...私は、この問題の領域が多くの製品を通じて十分に調査されていることを尋ねるだけです。このアプローチでは、OOTBのために解決される多くの難しい問題があります。 – cwash

+0

こんにちは、私はこれらのアプリケーションが実際に私の目標を達成するかもしれないことに同意しますが、私は内部のことを学び、私のアプリを微調整する方法を知って、いくつかのデザインの長所と短所を見ることができるように、さらに、私のアプリケーションはいくつかのトピックを購読できる必要がありますが、それらのすべてではありません。私はまた、帯域幅を節約し、多くのローカルアプリ全体でメモリを共有するためのローカルプロキシを作成する必要があります。 – Dave

答えて

0
  1. それはあなたがリクエスト処理のために、独自のスレッドプールを管理するための必要性を排除するように私はできる限り非同期ソケットを使用します。

  2. クライアントは2つのストリーム(リスト用と送信用)を使用する必要があります。これにより、クライアント側とサーバー側の両方で大幅に単純化されます。ここでも、複数のスレッドを管理する必要がないように非同期ソケットを使用します。

非同期コールバックで使用される共有リソースでロックを管理するように注意してください。できるだけ多くのリソースを共有することは避けてください。物事への同時アクセスを管理することは、通常、このようなアプリの最悪の部分です。

0

ActiveMQをチェックアウトしましたか?私はすでにトピックを扱っており、C#はNMS APIを使って話すことができると信じています。

+0

はい、それはすでにその種のサービスを提供していますが、私はより多くのことを学び、効率的かつスケーラブルなネットワークサーバーを書くことの内部を理解したいと思います。 – Dave

関連する問題