2011-12-20 5 views
1

パイプを使用したIPCを初めて使用しました。通常のパターンに慣れていません。ここに私が対処しなければならない設定があります。n個のサーバープロセスに作業を配布するクライアントプロセスがあります。終了後、サーバーは結果をサーバーに戻す必要があります。配布されなければならない作業の量は最初から分かっています。名前付きパイプを使用したn個のワーカープロセスの通信パターン

Client 
    |__Pipe 1_____ Server 1 
    | 
    |__Pipe 2_____ Server 2 
    | 
    |__ ... 

私の考えは、これに対処する方法です。サーバーは、起動時に作成するパイプの名前を決定するコマンドライン引数で開始されます。クライアントは、これらのパイプに作業を配布するために書き込みます。サーバーは仕事を終えると、仕事を受け取ったパイプに結果を書き出します。クライアントはサーバからの結果をn個のスレッドで待ちます。すべての結果が到着すると、部分的な結果が組み立てられます。

これは意味があると思いますか?いずれかの方向に1本のパイプを使用する利点がありますか?どのようにアクセスを同期しますか?あなたはそのトピックに関する読書のヒントを持っていますか?

答えて

1

私は決して名前付きパイプの専門家ではありませんが、私はそれらの小さな作業から同じ名前付きパイプで複数のサーバーを実行できます。クライアントが接続を試みると、最初に利用可能なサーバーがクライアントと照合されます。

これを聞いて10台のサーバーを持つ単一の名前付きパイプを持つことができます。クライアントが接続を要求すると、利用可能なサーバーが割り当てられ、基本的な負荷分散メカニズムが提供されます。単一のクライアントに同じ名前付きパイプへの複数の接続をオープンさせることもできます。そのため、各接続は別のサーバーインスタンスに接続されます。

こうすれば、確立された接続で回答が提供されますが、サーバーとクライアントの間でパイプ名を管理し調整する必要はありません。

+0

これは簡単です。クライアントは単に次の空きサーバに接続し、独自のパイプインスタンスを開きます。したがって、1本のパイプを使用するだけで十分です。 http://stackoverflow.com/questions/4570653/multithreaded-namepipeserver-in-c-sharpも参照してください。 – h0b0

関連する問題