Drogon写C++ Web服务只需三步:配置环境、编写HTTP处理器、编译运行;原生支持异步I/O、HTTP/1.1/2,无需Boost,适合高性能可控场景。
用 Drogon 写 C++ Web 服务,核心就三步:装好环境、写个 HTTP 处理器、编译运行。它不依赖 Boost,原生支持异步 I/O 和 HTTP/1.1、HTTP/2,适合追求性能和可控性的后端场景。
Drogon 的入口是 main() 中的 app().run(),路由通过宏或代码注册。最简例子:
#includeint main() { drogon::app().registerHandler("/hello", [](const drogon::HttpRequestPtr& req, std::function && callback) { auto resp = drogon::HttpResponse::newHttpResponse(); resp->setBody("Hello, Drogon!"); callback(resp); }, {drogon::Get}); drogon::app().run(); return 0; }
说明:
registerHandler() 绑定路径、处理函数和 HTTP 方法(如 Get)callback() 返回响应HttpResponse::newHttpResponse() 创建,支持 JSON、HTML、文件等格式别手写 CMakeLists —— 用官方工具 drogon_ctl 初始化工程:
立即学习“C++免费学习笔记(深入)”;
drogon_ctl create project myapp cd myapp drogon_ctl create controller UserController
这会自动生成:
config.json,可设监听端口、SSL、数据库连接等编译只需:mkdir build && cd build && cmake .. && make
Drogon 原生用 std::future / coroutine(C++20)做异步,比如查数据库不阻塞主线程:
app().defaultDbClient()->execSqlAsync("SELECT * FROM users")
.then([callback](const drogon::orm::Result& r) {
auto json = drogon::Json::Value::array();
for (const auto& row : r) {
json.push_back(row.toJson());
}
auto resp = drogon::HttpResponse::newHttpJsonResponse(json);
callback(resp);
});关键点:
execSqlAsync() 返回 Future,.then() 注册后续逻辑drogon_ctl 生成 Model)co_await 数据库调用,语法更线性生产常用配置在 config.json 中调整:
"listeners" 段指定 IP:Port,支持多监听端口"ssl" 开启 HTTPS,填入证书路径即可"static_files" 映射前端资源目录,如 "/static": "./public"
"hot_reloading": true,修改源码自动重编译(需 drogon_ctl 支持)上线建议用 systemd 或 supervisor 托管进程,Drogon 自带 graceful shutdown,收到 SIGTERM 会等请求完成再退出。
基本上就这些。Drogon 不是“胶水框架”,它把控制权交还给 C++ 工程师——你决定内存怎么管、异步怎么链、错误怎么抛。上手略比 Express 或 Flask 陡一点,但性能和确定性是实打实的。