项目概述:
HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器、客户端、Agent组件;其目标是提供高性能、通用性、简易性、可扩展、可定制;
鉴于此,其仅实现基本的通用框架通信、数据收发功能,供上层应用直接简单使用的接口实现;而对于数据包完整性和协议解析等未处理,
也就意味着需要应用层自己处理一些数据包构造或解析等操作;
事实上目前只能支持windows平台;
1. 对于TCP通信模式下:服务器端和Agent均采用的是异步IO模型中的完成端口模型,客户端采用的是就绪IO通告模型中的WSAEventSelect模型;
2. 对于UDP通信模式下:服务器端采用的是异步IO模型中的完成端口模型,客户端和Cast(广播或组播)均采用的是就绪IO通告模型中的WSAEventSelect模型;
以上通信模式下,客户端或广播未采用完成端口模型是考虑到实现复杂性和实际的应用场景需要,当然如果需要均采用完成端口模型也是可以的;
题外话:
Windows平台下目前已有以下几个通信模型:
1. 阻塞模式: 通过基础的socket API函数的实现为最基本的通信方式;
2. 就绪通告IO模型: Select多路复用、WSAAsyncSelect依赖窗口的事件通知、WSAEventSelect关联事件内核对象的事件通知;
3. 异步IO(重叠IO): 事件通告、回调通告、完成端口;
其中各个模型实现复杂度依次提高,性能也依次提高,故性能最好的便是完成端口,事实上完成端口不仅可以用于网络通信,
还可以用于文件或其他涉及到IO相关的场合;各个模式有优缺点,可根据应用场景采用相应的实现模型便可,很多时候可以直接使用已写好的稳定
通信框架而不一定要自己重头开始写,不过,无论怎么样均要根据在项目中的实际需要来综合考虑应该使用什么库或是自己动手去实现;
项目综述:
整体上结构清晰、类层次分明,比较容易学习,此外采用基于事件回调的方式的实现方式,这样控制组件和事件回调数据处理可以分离,便于客户更好
地进行数据处理,而无需要直到太多的细节实现,也便于扩展、实现库功能;基本上该库已封装得很好并提供了C++和C的接口(C接口也只是简单地对C++实现的接口包装)
、便于其他语言封装或扩展(分别封装在HPSocket.h和HPSocket4C.h中,可以看到导出的接口比较多,事实上好在其分别对C++接口和C接口实现各自的解决方案生成不同DLL,
导出的接口数分别约30、460;PS:其实此处一起导出到同一个DLL也是可以的,问题也不大且更方便客户更新库或上层应用,实现共享);
项目主体采用C++实现,结合部分C公共实现部分(此处C++开发方便且易地扩展,对于公共部分功能不适合放在C++类中的均用C实现,以减少类的大小和功能的
集中处理,很好地运用了面向对象程序设计的原则)(不用担心C++性能效率问题)。