共计 4067 个字符,预计需要花费 11 分钟才能阅读完成。
1)Crow 是什么(为什么选它)
- 定位:用 C++ 写 HTTP / WebSocket 服务的微框架,语法风格接近 Flask(
CROW_ROUTE(app, "/")([]{ ...});),上手门槛低。提供内置 JSON、Mustache 模板、Middlewares、静态文件、Blueprints 等。且为 header-only(也提供单头文件crow_all.h)。(GitHub) - 人气 / 活跃:GitHub 约 4.4k⭐ / 494 forks(以 2025-10-10 为准)。(GitHub)
- 依赖 / 版本:需要 C++17、Asio(1.28–1.30)。可启用 Zlib(压缩)与 OpenSSL(HTTPS)。(crowcpp.org)
- 状态提示:README 中标注 HTTP/2 与更完善的 Async 支持仍在进行中。(GitHub)
2)安装与环境(Linux / macOS / Windows)
Linux(推荐 CMake 或发行版包)
- 依赖:C++17、Asio;可选 Zlib、OpenSSL。(crowcpp.org)
- 方式一:包管理器(Deb/Ubuntu
.deb、ArchAUR)。(crowcpp.org) - 方式二:源码 + CMake 安装
git clone https://github.com/CrowCpp/Crow.git cd Crow && mkdir build && cd build cmake .. -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF make -j && sudo make install若要启用 HTTPS/ 压缩,可在 CMake 中打开CROW_ENABLE_SSL/CROW_ENABLE_COMPRESSION,并在你的项目里find_package(OpenSSL)/find_package(ZLIB)后链接对应 target。(crowcpp.org)
CMake 集成到你的项目
find_package(Crow)
target_link_libraries(your_project PUBLIC Crow::Crow)
macOS
- 一条命令装包:
brew install crow。也可下载 release 或源码,仅拷include/或使用单头crow_all.h。(crowcpp.org)
Windows
- vcpkg:
vcpkg install crow;或按文档用 VS + vcpkg 的 Manifest 来拉依赖。(crowcpp.org)
另外,官网列出多种渠道(
.deb/AUR/vcpkg/Homebrew/Nix/Conan/ 直接下载单头文件)可获取 Crow。(crowcpp.org)
3)10 分钟跑通:最小可运行示例
main.cpp
#include "crow.h" // 或 "crow_all.h"
int main() {
crow::SimpleApp app;
CROW_ROUTE(app, "/")([](){ return "Hello world";});
// 不指定端口则缺省 80;multithreaded 可省略
app.port(18080).multithreaded().run();
}
编译(Linux/macOS 示例)
g++ -std=c++17 main.cpp -lpthread -o demo
./demo
# 浏览器打开 http://localhost:18080
示例与要点来自官方「Your First Application」。(crowcpp.org)
4)常用功能速查
(1) 路由与参数 / 方法
// /add/1/2 -> "3"
CROW_ROUTE(app, "/add/<int>/<int>")
([](int a, int b){return std::to_string(a + b); })
.methods("GET"_method, "POST"_method);
Crow 支持 <int>/<uint>/<double>/<string>/<path> 参数、方法限定与请求 / 响应对象(crow::request / crow::response)等。(crowcpp.org)
(2) JSON(读写)
// 返回 JSON
CROW_ROUTE(app, "/json")([]{crow::json::wvalue x({{"message", "Hello"}});
x["count"] = 42;
return x; // 自动设置 content-type: application/json
});
// 读取 JSON(POST)CROW_ROUTE(app, "/sum").methods("POST"_method)
([](const crow::request& req){auto j = crow::json::load(req.body);
if(!j) return crow::response(crow::status::BAD_REQUEST);
int s = j["a"].i() + j["b"].i();
return crow::response(std::to_string(s));
});
内置 rvalue/wvalue 类型、初始化列表构造、异常控制宏等。(crowcpp.org)
(3) 模板(Mustache)
// ./templates/hello.html: Hello {{name}}!
CROW_ROUTE(app, "/tpl")([]{auto page = crow::mustache::load("hello.html");
crow::mustache::context ctx; ctx["name"] = "Crow";
return page.render(ctx); // 正确的 Content-Type
});
模板目录可全局 /Blueprint 局部设置,支持从字符串编译与安全路径控制。(crowcpp.org)
(4) 静态文件
- 约定目录
./static,访问路径/static/...(宏可重定义目录或端点)。 - 也可显式返回文件:
res.set_static_file_info("path/to/file")。(crowcpp.org)
(5) 中间件(全局 / 局部)
struct AdminGuard {struct context {};
void before_handle(crow::request& req, crow::response& res, context&) {if (req.remote_ip_address != "127.0.0.1") {res.code = 403; res.end(); }
}
};
// 注册顺序即调用顺序
crow::App<AdminGuard> app;
亦支持 局部中间件(只作用于某些路由 /Blueprint)。(crowcpp.org)
(6) WebSocket
CROW_WEBSOCKET_ROUTE(app, "/ws")
.onopen([&](crow::websocket::connection& conn){/* ... */})
.onmessage([&](crow::websocket::connection& c, const std::string& msg, bool bin){if (bin) {/*...*/} else {/* echo / broadcast ... */}
});
注意:生产环境建议开启协议校验:#define CROW_ENFORCE_WS_SPEC;可设置最大载荷和子协议。(crowcpp.org)
5)开启 HTTPS(可选)
- 生成 / 配置证书后,应用链式设置:
app.ssl_file("cert.crt", "key.key").run();或使用ssl_chainfile()处理 fullchain;编译期需启用CROW_ENABLE_SSL(CMake 或编译宏)。(crowcpp.org)
6)生产部署建议
- 反向代理:推荐放在 Nginx/Apache 后,SSL 交给代理,Crow 保持非 SSL,反代到你的端口。文档含最小可用的
location / {proxy_pass ...}配置示例。(crowcpp.org) - 开机自启:Systemd
.service模板示例见文档,可systemctl enable/start管理。(crowcpp.org) - 性能:使用
multithreaded()、Release 构建;按需启用压缩;静态文件可交给 Nginx。(功能点见官方特性与指南总览。)(crowcpp.org)
7)一份最小 CMake 项目骨架
CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(crow_demo CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(Crow) # 由安装的 Crow 提供
add_executable(crow_demo main.cpp)
target_link_libraries(crow_demo PUBLIC Crow::Crow)
# 可选:开启 HTTPS/ 压缩(并自己 find OpenSSL/ZLIB 后链接)# set(CROW_ENABLE_SSL ON)
# set(CROW_ENABLE_COMPRESSION ON)
(find_package(Crow) 与链接写法来自官方 Linux 指南。)(crowcpp.org)
参考 / 官方资源
- 官网(Getting Started / Guides / API)与包管理入口。(crowcpp.org)
- GitHub 仓库(特性清单、示例、Star/Fork)。(GitHub)
- 平台安装:Linux、macOS(含 Homebrew)、Windows(含 vcpkg)。(crowcpp.org)
- 功能指南:Routes / JSON / Mustache / Static / Middleware / Websockets。(crowcpp.org)
- HTTPS / 反代与自启:SSL、Proxies、Systemd。(crowcpp.org)
正文完

