2012-01-17 15 views
1

xmlクエリを送信してxml応答を受け取るバックエンドシステムに接続するtcpclientがあります。TcpClientを同期ブロッキングモードで再利用するにはどうすればよいですか?

バックエンドでは、クエリを実行する前にクライアントのログオンと環境設定を行う必要があります。これは高価な操作であるため、tcpclientを作成して、繰り返しクエリを実行するためには開いたままにしておくことが理にかなっています。

私は、多くの接続を処理するために最適化されていると言いますが、パフォーマンス上の理由から、多数のtcpclientsを接続したいと考えています。

クエリは、何千ものアイテムを含むリスト形式です。

リストから同時に多数のリクエストを実行できるように、再利用可能な接続されたtcpclientのグループを作成するにはどうすればよいですか(この例ではどのパターンがこのシナリオに適していますか?からベストプラクティスを学ぶ?

現在、接続とログオンプロセスをカプセル化する単一のサービスを使用して、1つずつ実行します。あなたが必要なもの

QueryService service = new QueryService(server, port, user, pass, params, app); 

foreach(var item in queries) 
{ 
    service.ExecuteRequest(item); 
} 

service.Disconnect(); 
+0

並列foreachループ内でtcp clientのasyncメソッドを使用しようとしましたか? –

+0

タイトルで説明したように、tcpclientは同期ブロッキングモードです。各クエリは、バックエンドが応答を送信する前に終了シーケンスを送信する必要があります。基本的なソケットでの同期の読み取りと書き込みができるかどうか分かりません。 –

答えて

1

thread poolまたはObject poolパターンです。基本的に、あなたはクライアントアプリケーションの任意の要素(関数またはオブジェクト)がサービスにアクセスする必要があるときにServiceオブジェクトのプールを作成し、することができます - それはいくつかの基準に基づいてサービスオブジェクトを参照することができます。

ステートレスである必要がありますので、任意のサービスオブジェクトを選択してサーバーに要求したときに、履歴によって問題が発生しないようにする必要があります。

+0

オブジェクトプールは、それがぴったりかもしれないように、私はさらに調査でしょうが、提案 –

+0

ためのおかげで、私はオブジェクトプールのパターンを実装し、それが御馳走を作品のリクエスト状態レス作るの周りにいくつかの問題を有していても良いようだ、多くのおかげでポインタのために。 –

関連する問題