服务端网络库是后端服务体系基石,网络库性能高低决定服务性能起点。本篇简介在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模型,完成端口完成了更多功能,不仅仅是完成事件通知,附带网络数据,还替代应用层实现了IO线程的调度。只有让应用层做得更少