2012-10-11 63 views
1

我有一個自定義TCP代理服務器監聽端口5888(虛擬端口)。代理服務器偵聽傳入的連接。當代理收到某些頁面的HTTP請求時,它應該將其中繼到端口80上的主服務器。對於其他頁面請求,代理服務器需要在端口8081上向主服務器發送數據。使用異步套接字實現TCP代理服務器線程

端口80被使用以服務HTML頁面,因爲端口8081用於將數據流式傳輸到客戶端。

Client --> Proxy(TCP Proxy Server) --> MainServer 
Client <-- Proxy(TCP Proxy Server) <-- MainServer 

我已經使用異步編程模型(BeginXX和EndXX)實現了代理。代理工作正常。連接大約10個客戶端到這個代理我沒有問題。

現在我想在代理中實現線程,以便可以有300多個同時連接到代理的客戶端。考慮到Async編程模型(異步套接字),實現此線程的最佳方法是什麼?

回答

1

這聽起來像你想要線程的線程。

準確地說,通過添加額外的線程將解決什麼問題?

鑑於異步模型回調到ThreadPool中,您已經獲得了免費的「線程化」。你爲什麼想要更多?

在讀取操作的異步回調中,您可以愉快地從一個流複製到另一個流。如果您也使用異步進行書寫,那麼不會給ThreadPool帶來任何重大負擔,因此IMO的工作最好留在那裏。

您是否考慮過使用async/await?如果它是一個選項,它會讓你的代碼在大腦上幾度嵌套。

+0

感謝您的回覆。我正在使用Visual Studio 2010,即使用BeginXX和EndXX的異步模型。我不想爲了線程而使用線程 - 我唯一擔心的是程序是否會處理來自客戶端的300個同時連接。 – NewUnhandledException

+0

@LivNow我建議這是你需要測試的東西,而不是優化可能不成問題的東西。如果你所做的只是用光邏輯複製流,我看不到任何需要在讀操作的回調以外的任何地方執行工作。只要確保你完全保持對讀寫IO的完全異步,所以你永遠不會阻塞長時間運行/阻塞操作的線程池,你將超過300。 – spender