周末程序猿
鹅厂程序猿,专注后台开发和人工智能领域~~
100篇原创内容
公众号
继续上一篇《Linux高性能网络编程十谈|C++11实现22种高并发模型》,大家对于 C++ 实现各种 Server 比较感兴趣,于是我把工作这些年接触的高性能开源的网络框架整理了一遍,基于9个C++网络框架实现 Echo Server 样例。
github代码地址:https://github.com/linkxzhou/mylib/tree/master/c%2B%2B/high_performance_server
为了大家简便测试,所以当前项目使用 Bazel 构建,减少一些库的依赖,构建步骤如下:
# ========== 安装bazel
# macOS
brew install bazel
# Ubuntu/Debian
sudo apt install apt-transport-https curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo"deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
sudo apt update && sudo apt install bazel
# CentOS/RHEL
sudo dnf copr enable vbatts/bazel
sudo dnf install bazel
# ========== 安装依赖
# macOS
brew install libuv libevent libev boost
brew install folly wangle proxygen # 可选
# Ubuntu/Debian
sudo apt-get install libuv1-dev libevent-dev libev-dev libboost-all-dev
# CentOS/RHEL
sudo yum install libuv-devel libevent-devel libev-dev boost-devel
# ========== 构建所有服务器
./build_all_bazel.sh
# 或使用 Bazel 直接构建
bazel build //...
# 构建特定服务器
bazel build //ace:ace_echo_server
bazel build //libevent:libevent_echo_server
bazel build //boost_asio:boost_asio_echo_server
bazel build //seastar:seastar_echo_server
bazel build //libev:libev_echo_server
bazel build //libuv:libuv_echo_server
bazel build //mongoose:mongoose_echo_server
bazel build //proxygen:proxygen_echo_server
bazel build //wangle:wangle_echo_server
框架 | 类型 | C++ 标准 | 特点 | 代表的开源项目 |
|---|---|---|---|---|
libevent | 事件驱动 | C++11 | 跨平台、轻量级、广泛使用 | Memcached, Tor, Chromium, tmux |
libev | 事件驱动 | C++11 | 高性能、Linux 优化 | Node.js (早期版本), PowerDNS, Varnish |
libuv | 事件驱动 | C++11 | Node.js 底层、跨平台 | Node.js, Julia, Luvit, pyuv |
Boost.Asio | 异步 I/O | C++11 | 功能丰富、标准化 | Beast (HTTP/WebSocket), cpp-netlib, Riak |
ACE | 面向对象 | C++17 | 企业级、模式丰富 | TAO (CORBA), OpenDDS, JAWS Web Server |
Seastar | 无共享 | C++17 | 极高性能、现代设计 | ScyllaDB, Redpanda, Seastar HTTP Server |
Wangle | 异步 | C++17 | Facebook 开源、Pipeline 架构 | Proxygen, McRouter, Facebook Services |
Proxygen | HTTP 专用 | C++17 | Facebook HTTP 库 | Facebook Web Services, Instagram API |
Mongoose | 嵌入式 | C++11 | 轻量级、易集成 | ESP32 项目, IoT 设备, 嵌入式 Web 服务器 |
特点:
底层架构:
核心组件:
event_base: 事件循环核心,管理所有事件evconnlistener: 连接监听器,处理新连接bufferevent: 缓冲事件处理,自动管理读写缓冲区echo_read_cb, echo_event_cb特点:
底层架构:
核心组件:
ev_loop: 高性能事件循环,支持多种后端ev_io: I/O 事件监视器,监控文件描述符ev_timer: 高精度定时器,基于红黑树实现accept_cb: 连接接受回调,处理新连接client_cb: 客户端数据处理回调特点:
底层架构:
核心组件:
uv_loop_t: 跨平台事件循环,统一不同平台的异步机制uv_tcp_t: TCP 句柄,封装网络连接uv_read_start: 开始异步读取数据uv_write: 异步写入数据,支持批量写入特点:
底层架构:
核心组件:
io_context: I/O 执行上下文,管理异步操作tcp::acceptor: TCP 接受器,监听新连接session: 会话管理类,封装连接生命周期async_accept, async_read_some, async_write特点:
底层架构:
核心组件:
ACE_Reactor: 反应器模式核心,支持多种实现ACE_Event_Handler: 事件处理器基类ACE_SOCK_Acceptor: 套接字接受器ACE_SOCK_Stream: 套接字流,封装网络通信特点:
底层架构:
核心组件:
app_template: 应用程序模板,管理应用生命周期server_socket: 服务器套接字,支持多核心connected_socket: 连接套接字,封装网络连接future<>: 异步操作结果,支持链式调用特点:
底层架构:
核心组件:
ServerBootstrap: 服务器引导程序,配置服务器Pipeline: 处理管道,链式处理请求ByteToMessageDecoder: 字节到消息解码器HandlerAdapter: 处理器适配器,连接不同类型的处理器IOBuf: 高效的缓冲区管理特点:
底层架构:
核心组件:
HTTPServer: HTTP 服务器,支持 HTTP/1.1 和 HTTP/2RequestHandler: 请求处理器,处理 HTTP 请求生命周期RequestHandlerFactory: 处理器工厂,创建请求处理器ResponseBuilder: 响应构建器,构建 HTTP 响应特点:
底层架构:
核心组件:
mg_mgr: 连接管理器,管理所有网络连接mg_connection: 连接对象,封装单个网络连接mg_http_listen: HTTP 监听,启动 HTTP 服务mg_http_reply: HTTP 响应,发送 HTTP 回复