無論什么平臺,,編寫支持高并發(fā)性的網(wǎng)絡(luò)服務(wù)器,瓶頸往往出在I/O上,,目前最高效的是采用Asynchronous I/O模型,,Linux平臺提供了epoll,Windows平臺提供了I/O Completion Port(IO完成端口,,即IOCP),。
Windows 自winsock2開始就提供了IOCP支持,可以通過C++直接調(diào)用API,,但對于基于.Net的C#開發(fā),,是在.Net Framework2.0開始才引入的,,在2.0版本下,最高效的網(wǎng)絡(luò)服務(wù)器是通過異步Socket的一些列Beginxxx,,Endxxx方法實現(xiàn)的,, 底層就是基于IOCP的。 當.Net Framework升級到2.0 sp1之后,,.Net Socket又提供了一種更高效的一些列xxxAsync方法,,對底層IOCP實現(xiàn)性能有不少改進,.Net Framework升級到3.5之后更是成熟穩(wěn)定,,微軟也開始大力推廣,。 在實際應用中,證明C#編寫基于.Net IOCP的高性能服務(wù)器可以支持10000個以上的TCP長連接,。但在具體實現(xiàn)過程中需要注意幾個問題: 1.SocketAsyncEventArgs和Buffer最好預先分配,,并能回收重復利用。 2. 一個Socket的Send和Receive最好分別對應一個SocketAsyncEventArgs,,因為當一個 SocketAsyncEventArgs被ReceiveAsync調(diào)用掛起后,,在調(diào)用SendAsync時就會出異常。同樣不要對一個 SocketAsyncEventArgs在一個異步操作被掛起時再次調(diào)用,。 參考文章: http://msdn.microsoft.com/zh-cn/magazine/cc163356.aspx http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx |
|
來自: 網(wǎng)文收集 > 《我的圖書館》