发布一个高性能的Reactor模式的C++网络库:evpp
简介
https://github.com/Qihoo360/evpp是一个基于libevent开发的现代化的支持C++11特性的高性能网络库,自带TCP/UDP/HTTP等协议的异步非阻塞式的服务器和客户端库。
特性
- 现代版的C++11接口
- 非阻塞异步接口都是C++11的functional/bind形式的回调仿函数(不是libevent中的C风格的函数指针)
- 非阻塞纯异步多线程TCP服务器/客户端
- 非阻塞纯异步多线程HTTP服务器/客户端
- 非阻塞纯异步多线程UDP服务器
- 支持多进程模式
- 优秀的跨平台特性和高性能(继承自libevent的优点)
除此之外,基于该库之上,还提供两个附带的应用层协议库:
evmc
:一个纯异步非阻塞式的memcached
的C++客户端库,支持membase
集群模式。该库已经用于生产环境,每天发起1000多亿次memcache查询请求。详情请见:evmc readmeevnsq
: 一个纯异步非阻塞式的NSQ
的C++客户端库,支持消费者、生产者、服务发现等特性。该库已经用于生产环境,每天生产200多亿条日志消息。详情请见:evnsq readme
将来还会推出redis
的客户端库。
项目由来
我们开发小组负责的业务需要用到TCP协议来建设长连接网关服务和一些其他的一些基于TCP的短连接服务,在调研开源项目的过程中,没有发现一个合适的库来满足我们要求。结合我们自身的业务情况,理想中的C++网络库应具备一下几个特性:
- 接口简单易用,最好是C++接口
- 多线程,也能支持多进程
- 最好是基于libevent实现(因为现有的历史遗留框架、基础库等是依赖libevent),这样能很方便嵌入libevent的事件循环,否则改动较大或者集成起来的程序可能会有很多跨线程的调用(这些会带来编程的复杂性以及跨线程锁带来的性能下降)
基于这些需求,可供选择的不多,所以我们只能自己开发一个。开发过程中,接口设计方面基本上大部分是参考muduo项目来设计和实现的,当然也做了一些取舍和增改;同时也大量借鉴了Golang的一些设计哲学和思想。下面举几个小例子来说明一下:
Duratio