C# IOCP服務器項目(學習)


無論什么平台,編寫支持高並發性的網絡服務器,瓶頸往往出在I/O上,目前最高效的是采用Asynchronous I/O模型,Linux平台提供了epoll,Windows平台提供了I/O Completion Port(IO完成端口,即IOCP)。

Windows自winsock2開始就提供了IOCP支持,可以通過C++直接調用API,但對於基於.Net的C#開發,是在.Net Framework2.0開始才引入的,在2.0版本下,最高效的網絡服務器是通過異步Socket的一些列Beginxxx,Endxxx方法實現的, 底層就是基於IOCP的。

當.Net Framework升級到2.0 sp1之后,.Net Socket又提供了一種更高效的一些列xxxAsync方法,對底層IOCP實現性能有不少改進,.Net Framework升級到3.5之后更是成熟穩定,微軟也開始大力推廣。

在實際應用中,證明C#編寫基於.Net IOCP的高性能服務器可以支持10000個以上的TCP長連接。但在具體實現過程中需要注意幾個問題:
1.SocketAsyncEventArgs和Buffer最好預先分配,並能回收重復利用。
2.一個Socket的Send和Receive最好分別對應一個SocketAsyncEventArgs,因為當一個 SocketAsyncEventArgs被ReceiveAsync調用掛起后,在調用SendAsync時就會出異常。同樣不要對一個 SocketAsyncEventArgs在一個異步操作被掛起時再次調用。

參考文章:

http://msdn.microsoft.com/zh-cn/magazine/cc163356.aspx

http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM