服务端网络库是后端服务体系基石,网络库性能高低决定服务性能起点。本篇简介在windows下利用完成端口来搭建服务端网络库。
1. 技术选型
windows下网络IO模型大致有:select模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠I/O模型、完成端口模型,共五类模型。
(一)select模型贴近底层使用socket基础函数,封装简单易开发,但性能不太高,适用小量连接。
(二)WSAAsyncSelect模型基于windows消息系统模型,和界面窗口易于配合便于开发,适合基于windows窗口界面开发,不适合服务端。
(三)WSAEventSelect模型,基于事件通知模型,由于系统限制每组事件关联有数量上限,虽然可以采用一定的技术突破一定量限制,但相对还是有限制,不好扩展。
(四)重叠I/O模型。其实质也是基于事件通知模型,只不过系统封装了一部分,没有事件关联上的数量限制。咋一看该模式和上面模型都是基于事件通知模型,那为啥还区分为两类模型呢?其实本模型虽然和WSAEventSelect模型都是基于事件通知模型,但是WSAEventSelect模型只做事件通知,告知应用那个socket发生了事件,该去处理了。而本模型,除了事件通知以外,同时还附带着网络数据,无需应用层调用recv去接收数据。通过上述描述,可知本模型是上面模型的扩展,是递进关系。
(五)完成端口模型。完成端口模型是基于windows系统提供的几个API基础上实现的高容量,高性能网络IO模型。其实质同样也是基于事件通知,只不过类比起前面两类IO模型,完成端口完成了更多功能,不仅仅是完成事件通知,附带网络数据,还替
Windows下使用IOCP构建高效服务端网络库

本文介绍了在Windows环境下利用完成端口(IOCP)搭建高性能服务端网络库的技术选型和关键细节。文章分析了各种网络IO模型的优缺点,最终选择了完成端口模型,因为它能提供高容量、高性能的网络IO。文中详细阐述了完成端口相关的API,如CreateIoCompletionPort、GetQueuedCompletionStatus和PostQueuedCompletionStatus,并提出了网络库设计的几点关键要素,包括IO线程与处理线程的分离、AcceptEx预建连接、内存管理和负载均衡策略等。
最低0.47元/天 解锁文章
22万+

被折叠的 条评论
为什么被折叠?



