2011-03-29 206 views
0

我正在設計一個模擬器應用程序,其中應用程序啓動多個套接字連接(大約1000個連接)到服務器。我不想啓動多個線程來處理這些連接,因爲系統不能處理那麼多的客戶端。使用選擇沒有什麼意義,因爲我需要循環1000個可能很慢的連接。請建議我如何處理這種情況。多套接字客戶端連接到服務器

回答

3

您想與I/O Completion Port(IOCP)一起使用異步I/O。

這很容易解釋,但任何需要支持大量併發套接字的Windows應用程序都應該使用IOCP。

IOCP本質上是一個Windows提供的線程安全工作隊列。你將一個'完成數據包'排隊到一個IOCP,然後另一個線程將它出隊並且使用它。

您還可以將支持重疊操作的多種類型的句柄(如套接字)關聯到IOCP。當您將句柄與IOCP關聯時,重疊操作(如WSARecv)會自動將完成數據包發送到關聯的IOCP。

所以,基本上,你可以有一個線程處理所有1000個連接。每個套接字將被創建爲一個重疊套接字,然後與您的IOCP相關聯。然後,您可以在所有1000個套接字上調用WSARecv,並等待完成數據包可用。當收到數據時,操作系統會將完成數據包發送到關聯的IOCP。這將包含相關信息,例如讀取了多少數據以及包含數據的緩衝區。

0

循環1000個句柄仍然比發送1000個數據包快得多,所以我不擔心這裏的性能。 select()仍然是要走的路。

相關問題