# 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都绑定独立线程运行。**

一点微小的工作。