2010-05-08 59 views
4

如果您在C#中使用異步服務器套接字,那麼套接字上的正確backlog是什麼?例如:什麼是異步服務器套接字的正確積壓?

server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint iep = new IPEndPoint(IPAddress.Any, port); 
server.Bind(iep); 
server.Listen(10); 
+1

我總是傾向於使用'5',但我沒有針對'爲什麼'的明確推理解釋 - 這只是我一直用於所有偵聽套接字的默認值,異步或不行;-) – 2010-05-08 04:55:11

回答

3

在大多數應用程序中,偵聽器本身可能不是瓶頸。更常見的情況是,您需要通過做某種工作來響應這些TCP請求,同時您的應用程序可以有效使用的工作人員數量將小於理論上可以維持的連接數量。

這可能解釋了亞歷克斯·馬爾泰利在評論「經驗法則」:

我總是傾向於使用5,但我已經沒有理由大幅解釋原因。

在四核服務器上,如果客戶端啓動CPU密集型任務,這是有意義的; 4個工人/線程/核心的連接,以及一個在負載很重時保持服務響應的服務。

但是,如果你的工作不是CPU密集型的,那麼上面的限制/解釋對你來說是無關緊要的,你可能能夠管理10或50個連接,或者你可能需要使用一些機器獨有的資源,一。我基本上同意Hans,因爲對此沒有硬性和快速的「正確答案」,您需要查看您的應用程序的功能,估計您認爲它可以實際處理多少個連接,並對其進行調整通過測試獲得最大效率

相關問題