我有一個服務器應用程序(單例,簡單的.NET控制檯應用程序),與GlobalCache GC-100-12進行通信,用於路由IR命令。本地網絡上的各種.NET WinForm客戶端連接到我的服務器應用程序並向其發送ASCII命令。服務器應用程序將這些ASCII命令排隊,然後通過TCP連接將它們發送到GC-100-12。在C#中處理這個TCP連接的首選方法是什麼?
我的問題是,從服務器的角度來處理這種連接的最佳方式是什麼?我可以想到兩種方法:
爲每個單獨的請求創建並打開一個新的TcpClient。當請求完成時關閉TcpClient。
在服務器啓動時創建並打開一個TcpClient,並使用保持活動狀態(如有必要)在服務器對象的生命週期中保持連接處於打開狀態。
我問這個問題,因爲我想知道爲每個請求創建一個新的TcpClient開銷。這是一項昂貴的手術嗎?這是一種不好的做法嗎?
目前我正在做#1,並將每次傳輸的結果打印到控制檯。偶爾某些連接會超時,並且命令不會被路由,我想知道是否這是因爲每次創建新的TcpConnection的開銷,或者是由於其他原因。
我可以看到#2更復雜,因爲如果連接斷開,它必須被重新創建,並且需要更多的代碼來處理這種情況。
我在找這方面的一般建議。我沒有很多使用TcpClient類的經驗。