如前文所述,我抽了些时间码了一套网络通信的框架代码。
现在放在GitHub上:https://github.com/KonsanAlide/KonsanNet
设想中这套框架包含如下模块:
1.通信服务端模块CXCommunicationServer:支持TCP、UDP两种协议,支持WINDOWS和Linux两种平台,包含会话管理、数据包解析、线程调度管理、数据包分发等模块,大概分了四层,通信内核层(EPOLL和IOCP模型IO处理层)、数据包解析层(拆解包、验证、压缩、加密)、会话管理层、用户消息处理层。
2.客户端模块CXCommunicationClient:包含一个基础的SOCKET封装库,包含通信会话管理类,包含基础的数据包组包和拆解包,包含rpc对象的调用例子,包含文件传输例子,包含基础消息通信例子。
3.文件库CXFile:对Windows文件操作接口和Linux的操作接口做了一个简单的封装,主要是用于大文件的处理。
4.内存管理库CXMemoryCache:一个简单的内存管理库,用了一些Linux slab的原理,写了一个链表来管理内存的分配和释放,写了一个类来管理不同大小的块的内存池对象,用于解决网络通信中内存频繁的分配和释放问题。
5.线程锁库CXLock:对Windows 的临界区和Linux的spin_lock,mutex进行一个简单的封装。
6.日志类CXLog:简单的日志类,有待扩展。
7.线程库CXThread:对Windows和Linux的线程函数进行了一下简单的封装,主要是为了兼容非C++11的低版本编译环境。
8.套接字库CXSocketWrapper:对socket的操作函数进行封装,统一Windows和Linux的调用接口。这个库里面的核心类是我以前从网上下载下来修改过的,已经忘记来源于哪,如果有版权问题,或者发现原作者,请麻烦联系我,谢谢。
9.事件库CXEvent:对Windows的event和Linux的条件变量进行包装,统一Windows和Linux的调用接口。
该框架,目前在TCP通信方面已经进行了功能性的测试,包含Windows和Linux版本,初步实现了会话管理、消息通信处理和文件传输处理,但依然有很多需要改进的地方,后续我会慢慢的改进它,也欢迎大家参与改进工作,谢谢!