C#編寫基於.Net IOCP的高效能伺服器)

來源:互聯網
上載者:User
無論什麼平台,編寫支援高並發性的網路伺服器,瓶頸往往出在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.