用C/C++写web服务器

如果你想用C/C++写一个轻量或者高性能的web服务器,你可以参考下文中列出的C/C++ web库。

https://www.reddit.com/r/cpp/comments/cjj9t5/what_c_web_server_library_one_should_use_nowadays/ 这个问题得到启发,并了解到了之前没有听过的一些C++服务器框架,所以对目前成熟的、轻量的、高性能的C++ web库进行了总结和归纳。选择使用哪一个库可以根据自己的自身需要,比如说你不想依赖boost,就可以选择没有使用boost asio的库或者boost的库;如果你想使用现代C++语言进行编程,你就可以选择非C的库;如果不想重度耦合,可以选择只有单个头文件的库。

1 C/C++ web服务第三方库、框架整理

1.1 Crow

Github:https://github.com/CrowCpp/Crow

Crow 是一个用于创建 HTTP 或 Websocket Web 服务的 C++ 框架。它使用类似于 Python 的 Flask 的路由,这使得它易于使用。它的速度也非常快,击败了多个现有的 C++ 框架以及非 C++ 框架。

1.2 Mongoose

Github:https://github.com/cesanta/mongoose

Mongoose 是一个 C/C++ 网络库。它为 TCP、UDP、HTTP、WebSocket、MQTT 实现事件驱动的非阻塞 API。它专为连接设备并使它们上线而设计。自 2004 年上市以来,被大量开源和商业产品使用 - 它甚至在国际空间站上运行!Mongoose 使嵌入式网络编程变得快速、健壮且简单。

1.3 restinio

Github:https://github.com/Stiffstream/restinio

跨平台、高效、可定制且强大的异步 HTTP/WebSocket 服务器 C++14 库,在性能和易用性之间取得了适当的平衡。

1.4 proxygen

Github:https://github.com/facebook/proxygen

Facebook的C++ Http库,该框架支持 HTTP/1.1、SPDY/3、SPDY/3.1、HTTP/2 和 HTTP/3。目标是提供一个简单、高性能、现代的 C++ HTTP 库。

1.5 pistache

Github:https://github.com/pistacheio/pistache

Pistache 是一个现代且优雅的 C++ HTTP 和 REST 框架。它完全用纯 C++17 编写,并提供清晰且令人愉快的 API。

1.6 uWebsockets

Github:https://github.com/uNetworking/uWebSockets

简单、安全且符合标准的 Web 服务器,适合最苛刻的应用程序

1.7 Simple-Web-Server

Gitlab:https://gitlab.com/eidheim/Simple-Web-Server

一个非常简单、快速、多线程、平台独立的 HTTP 和 HTTPS 服务器和客户端库,使用 C++11 和 Boost.Asio 实现。创建为一种从 C++ 应用程序中提供 REST 资源的简单方法。

1.8 libmicrohttpd

官网:https://www.gnu.org/software/libmicrohttpd/

GNU libmicrohttpd 是一个小型 C 库,可以轻松地将 HTTP 服务器作为另一个应用程序的一部分运行。GNU Libmicrohttpd 是免费软件,是GNU 项目的一部分。

1.9 libhttpserver

Github:https://github.com/etr/libhttpserver

libhttpserver 是一个用于构建高性能 RESTful Web 服务器的 C++ 库。libhttpserver 基于 libmicrohttpd构建,为开发人员提供简单的 API 以使用 C++ 创建 HTTP 服务。

1.10 cpprestsdk

Github:https://github.com/Microsoft/cpprestsdk

C++ REST SDK 是一个 Microsoft 项目,用于使用现代异步 C++ API 设计以本机代码进行基于云的客户端-服务器通信。该项目旨在帮助 C++ 开发人员连接到服务并与之交互。

1.11 Poco

Github:https://github.com/pocoproject/poco

POCO C++ 库是功能强大的跨平台 C++ 库,用于构建在桌面、服务器、移动、物联网和嵌入式系统上运行的基于网络和互联网的应用程序。

1.12 H2O

Github:https://github.com/h2o/h2o

H2O - 优化的 HTTP/1、HTTP/2、HTTP/3 服务器,H2O 是新一代 HTTP 服务器。与老一代的 HTTP 服务器相比,它不仅速度非常快,而且还为最终用户提供更快的响应。

1.13 Beast

Github:https://github.com/boostorg/beast

Beast 是一个仅包含 C++ 标头的库,通过使用 Boost.Asio 的一致异步模型提供低级 HTTP/1、WebSocket 和网络协议词汇类型和算法,作为编写可互操作网络库的基础。

1.14 civetweb

Github:https://github.com/civetweb/civetweb

提供易于使用、功能强大、C (C/C++) 嵌入式 Web 服务器,并具有可选的 CGI、SSL 和 Lua 支持。CivetWeb 拥有 MIT 许可证,因此您可以不受限制地进行创新。

CivetWeb 于 2013 年 8 月从 Mongoose 的最后一个 MIT 版本分叉出来。

1.15 oat++

Github:https://github.com/oatpp/oatpp

轻量且功能强大的 C++ Web 框架,用于高度可扩展且资源高效的 Web 应用程序。它是零依赖且易于移植的。

1.16 cpp-httplib

Github:https://github.com/yhirose/cpp-httplib

一个 C++11 单文件头跨平台 HTTP/HTTPS 库。

1.17 libhv

github:https://github.com/ithewei/libhv

libhv是一个比libevent、libev、libuv更易用的跨平台国产网络库,可用来开发TCP/UDP/SSL/HTTP/WebSocket客户端/服务端。

libhv是一个类似于libevent、libev、libuv的跨平台网络库,提供了带非阻塞IO和定时器的事件循环。 libhv的名称也正是继承此派,寓意高性能的事件循环High-performance event loop library。

1.18 其他

肯定还有其他非常优秀的库,不过不在本文中一一例举了。

参考链接