2014-01-30 31 views
0

春節快樂 - 春節。如何啓動大量的tcp客戶端連接

我正在進行服務器編程,並在10055錯誤中發生了問題。

我有一個TCP客戶端應用程序,它可以模擬大量的客戶端。

聽說65534是一臺計算機的tcp客戶端連接的最大值, 我使用Asio來實現啓動50000異步tcp連接的模擬客戶端。

僞代碼:

for (int i=0: i<50000 ; ++i) 
    asyn_connect(...); 

開發環境是:

的Windows XP,X86,4G內存,4核CPU

HKLM \系統\ CurrentControlSet \服務\ TCPIP \參數\ MaxUserPort的= 65000

結果是:

when con nects達到17000,10055錯誤發生。

我試過另一臺電腦,錯誤發生在30000連接處,好些但不夠好。 (服務器應用程序在另一臺計算機上運行,​​也使用Asio)。

問題是: 如何在一臺計算機上成功啓動50000個客戶端連接?

+0

您是否考慮查找Winsock錯誤10055? – EJP

+0

緩衝區已​​滿。資源枯竭。 – thomas

+0

你畫的是什麼結論? – EJP

回答

0

Cou可以嘗試更塊狀地做它: 例如。從10000個連接開始。一旦5000個連接成功啓動下一個5000 async_connect調用。然後重複,直到你達到你的目標。這至少會減少IO完成端口的壓力。如果它不起作用,我會嘗試更小的塊。

但是,取決於操作系統耗盡內存的位置,這仍然無濟於事。

連接成功後您是否直接啓動異步讀取?這些也將耗盡內存資源。

+0

我會在假期後試試 – thomas