2009-02-27 59 views
0

我有一個服務器應用程序(單例,簡單的.NET控制檯應用程序),與GlobalCache GC-100-12進行通信,用於路由IR命令。本地網絡上的各種.NET WinForm客戶端連接到我的服務器應用程序並向其發送ASCII命令。服務器應用程序將這些ASCII命令排隊,然後通過TCP連接將它們發送到GC-100-12。在C#中處理這個TCP連接的首選方法是什麼?

我的問題是,從服務器的角度來處理這種連接的最佳方式是什麼?我可以想到兩種方法:

  1. 爲每個單獨的請求創建並打開一個新的TcpClient。當請求完成時關閉TcpClient。

  2. 在服務器啓動時創建並打開一個TcpClient,並使用保持活動狀態(如有必要)在服務器對象的生命週期中保持連接處於打開狀態。

我問這個問題,因爲我想知道爲每個請求創建一個新的TcpClient開銷。這是一項昂貴的手術嗎?這是一種不好的做法嗎?

目前我正在做#1,並將每次傳輸的結果打印到控制檯。偶爾某些連接會超時,並且命令不會被路由,我想知道是否這是因爲每次創建新的TcpConnection的開銷,或者是由於其他原因。

我可以看到#2更復雜,因爲如果連接斷開,它必須被重新創建,並且需要更多的代碼來處理這種情況。

我在找這方面的一般建議。我沒有很多使用TcpClient類的經驗。

回答

3

我們有一個打開telnet會話到一個老的基於PICK的系統的例子。我們發現,每次請求進入時打開TCP連接的開銷都相當昂貴,我們決定實施一個禁止例行程序來保持連接處於打開狀態。這更復雜,但只要您的終點不是爲許多客戶服務,那麼固定連接聽起來像是一個可行的解決方案。

如果您想防止在沒有流量時保持連接打開,您也可以將其設置爲有超時。五分鐘沒有活動,然後關閉連接。

相關問題