查看更多细节 wiki
Cppnet是一个封装在TCP协议上的proactor模式multi-thread C++11网络库,支持在windows,linux以及macOS上编译使用。
-
简单
:- 对外暴漏最少接口,所有的网络响应都封装为异步回调的形式
- 接口声明类似系统原生
- 只新增一个buffer接口集
- 支持IPv6和IPv4
-
快速
:- 分别采用epoll,wepoll,kqueue做底层事件驱动
- 多线程惊群交由内核处理
- 参照SGI STL和Nginx实现了内存池,每个连接都独享一个内存池对象,所有从内存池中申请的内存都由智能指针管理
- 用时间轮实现定时器
-
明了
:- 结构上分为三层:事件驱动层,会话管理层,接口层,各层之间通过回调向上通知
- 各个模块之间职责分工明确,上帝的事儿归上帝管,凯撒的事儿归凯撒管
- 通过接口解耦模块,符合最小接口原则和依赖倒置原则
快速使用cppnet
,以及使用注意事项,请看快速开始。
cppnet
对外接口主要包括三种类型,也分别定义在三个头文件中:
- 初始化和全局配置类,定义在cppnet
socket
操作类,cppnet_socketbuffer
读取类,定义在cppnet_buffer
接口详情请参考API。
所有示例都在 test 目录下:
- simple: 一个简单的使用示例。
- echo: 实现了200连接量的echo的测试程序。
- http: 参照muduo实现了一个简单的http服务器。
- sendfile: 文件发送和接收示例。
- pingpong: pingpong测试程序。
- rpc: 简单的rpc示例。
- multi_port: 多监听端口示例。
目前用Apache ab
对test目录中的http
测试服务做了压测,并与muduo
做了对比。
详情请看ab压测。
请看编译
- 为什么在windows上不使用IOCP?
请看文章cppnet网络库最后一节。
CppNet使用BSD 3-Clause使用条款,详情请看BSD-3-Clause。