C#编写基于.Net 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

2人评论了“C#编写基于.Net IOCP的高性能服务器”

  1. Stimulates blood flow on the face to make the skin clearer.
    During the massage whip this foam ( วิปโฟม ) into the face. There will be stimulation of the circulatory system as well. The importance is to help create a radiant face more than ever. Fills the skin with a radiant glow, maintaining a clear balance level. As a result, the facial skin looks younger. The same mood as girls who say that they have pinkish skin because they have a lot of rosy blood. The blood work during the foam massage on the face is similar in principle. https://www.garnier.co.th/about-our-brands/sakura-white/cleansers/pinkish-poreless-whip-foam

发表评论

邮箱地址不会被公开。