IR コマンドをルーティングする目的で GlobalCache GC-100-12 と通信するサーバー アプリケーション (シングルトンの単純な .NET コンソール アプリケーション) があります。ローカル ネットワーク上のさまざまな .NET WinForm クライアントがサーバー アプリケーションに接続し、ASCII コマンドを送信します。サーバー アプリケーションは、これらの ASCII コマンドをキューに入れ、TCP 接続を介して GC-100-12 に送信します。
私の質問は、サーバーの観点からこの接続を処理する最良の方法は何ですか? 次の 2 つの方法が考えられます。
個々の要求ごとに新しい TcpClient を作成して開きます。リクエストが完了したら、TcpClient を閉じます。
サーバーの起動時に 1 つの TcpClient を作成して開き、(必要に応じて) キープアライブを使用して、サーバー オブジェクトの存続期間中、接続を開いたままにします。
リクエストごとに新しい TcpClient を作成するオーバーヘッドが気になるので、この質問をします。高額な手術ですか?これは悪い習慣ですか?
現在、私は #1 を実行しており、各送信の結果をコンソールに出力しています。時折、一部の接続がタイムアウトし、コマンドがルーティングされないことがあります。これは、毎回新しい TcpConnection を作成するオーバーヘッドが原因なのか、それとも何か他のことが原因なのか疑問に思っていました。
接続が切断された場合は再作成する必要があり、その状況を処理するにはもう少しコードが必要になるため、#2 はより複雑であることがわかります。
これに関する一般的なアドバイスを探しています。TcpClient クラスを扱った経験はあまりありません。