我正在設計一個模擬器應用程序,其中應用程序啓動多個套接字連接(大約1000個連接)到服務器。我不想啓動多個線程來處理這些連接,因爲系統不能處理那麼多的客戶端。使用選擇沒有什麼意義,因爲我需要循環1000個可能很慢的連接。請建議我如何處理這種情況。多套接字客戶端連接到服務器
0
A
回答
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()
仍然是要走的路。
相關問題
- 1. 客戶端通過套接字連接多臺服務器
- 2. 連接多個客戶端的異步套接字服務器
- 3. 無法使用套接字連接客戶端到服務器
- 4. Android客戶端套接字無法連接到服務器
- 5. 套接字 - Android客戶端到C#服務器連接
- 6. Javascript客戶端如何連接到PHp套接字服務器?
- 7. 客戶端無法連接到服務器套接字 - Android
- 8. Java套接字 - 關閉到服務器套接字的telnet客戶端連接
- 9. 將C套接字客戶端連接到C#套接字服務器
- 10. Python套接字客戶端到Java套接字服務器
- 11. PHP套接字服務器/客戶端
- 12. 客戶端服務器udp套接字
- 13. 套接字java客戶端服務器
- 14. 客戶端 - 服務器套接字
- 15. 服務器/客戶端套接字
- 16. 客戶端服務器套接字C#
- 17. Python服務器客戶端套接字
- 18. Java套接字客戶端/服務器
- 19. php套接字服務器檢查客戶端是否連接
- 20. 服務器/客戶端套接字連接
- 21. 同時關閉服務器和客戶端套接字連接
- 22. Java雙向套接字連接(服務器/客戶端)
- 23. 客戶端和服務器Android套接字連接
- 24. 無法連接Java套接字服務器和客戶端
- 25. 客戶端和服務器套接字連接
- 26. Java客戶端/ Ruby服務器套接字連接
- 27. AS3客戶端 - C#服務器套接字連接失敗,
- 28. Typescript客戶端套接字未與服務器連接
- 29. Android客戶端PC服務器java套接字連接失敗
- 30. 如何將客戶端連接到多個服務器套接字?