# libuv_cpp11
**Repository Path**: PuLiangLu/libuv_cpp11
## Basic Information
- **Project Name**: libuv_cpp11
- **Description**: libuv的C++11封装。libuv wrapper in c++11/14.
- **Primary Language**: C++
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-07-27
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# libuv_cpp11
对libuv的C++风格封装,用于线上项目,做过压测。
* TCP相关类封装:`TcpServer`、`TcpClient`、`TcpConnection`、`TcpAccept`。及把C风格回调改为C++11风格的回调(支持非静态类成员函数及lambda)。
* `Timer`及`TimerWheel`:定时器及时间复杂度为O(1)的心跳超时踢出机制。
* `Async`:异步机制封装。相对于原生libuv async接口,优化了调用多次可能只运行一次的问题。由于libuv几乎所有api都非线程安全,建议使用writeInLoop接口代替直接write(writeInLoop会检查当前调用的线程,如果在loop线程中调用则直接write,否则把write加到loop线程中执行)。
* libuv信号封装。
* `Packet`与`PacketBuffer`:包与缓存,发送/接受包,用于解决TCP残包/粘包问题,由ListBuffer和CycleBuffer两种实现,可通过宏配置(前者空间友好,后者时间友好)。
* Log日志输出接口,可绑定至自定义Log库。
** **
简单性能测试:单线程1k字节ping-pong。
环境:Intel Core i5 6402 + ubuntu14.04.5 + gcc5.5.0 + libuv1.22.0 + O2优化
libuv_cpp | no use PacketBuffer|CycleBuffer|ListBuffer|
:---------:|:--------:|:--------:|:--------:|
次/秒 | 192857 |141487|12594|
** **
**!对于诸如`uv::Timer`,`uv::TcpClient`等对象的释放需要调用close接口并在回调函数中释放对象,否则可能会出错。**
**!切勿在Loop线程外创建注册该Loop下的事件相关对象(`uv::TcpClient`,`uv::TcpServer`,`uv::Timer`……),建议每个Loop都绑定独立线程运行。**
一点微小的工作。