Drogon是一个基于 C++14/17 的 Http 应用框架,使用 Drogon 可以方便的使用 C++构建各种类型的 Web 应用服务端程序。gitbub:Drogon。
Drogon是作者非常喜欢的美剧《权力的游戏》中的一条龙的名字(汉译作卓耿),和龙有关但并不是 dragon 的误写,为了不至于引起不必要的误会这里说明一下。
Drogon 的主要应用平台是 Linux,也支持 Mac OS、FreeBSD,目前还不支持 Windows。它的主要特点如下:
- 网络层使用基于 epoll(MacOS/FreeBSD 下是 kqueue)的 NIO 框架,提供高并发、高性能的网络 IO。详细请见性能测试;
- 全异步编程模式;
- 支持 Http1.0/1.1(server 端和 client 端);
- 基于 template 实现了简单的反射机制,使主程序框架、控制器(controller)和视图(view)完全解耦;
- 支持 cookies 和内建的 session ;
- 支持后端渲染,把控制器生成的数据交给视图生成 Html 页面,视图由类似 JSP 的 CSP 文件描述,通过 CSP 标签把 C++代码嵌入到 Html 页面,由 drogon 的命令行工具在编译阶段自动生成 C++代码并编译;
- 支持运行期的视图页面动态加载(动态编译和加载 so 文件);
- 非常方便灵活的路径(path)到控制器处理函数(handler)的映射方案;
- 支持过滤器(filter)链,方便在控制器之前执行统一的逻辑(如登录验证、Http Method 约束验证等);
- 支持 https(基于 OpenSSL 实现);
- 支持 websocket(server 端);
- 支持 Json 格式请求和应答, 对 Restful API 应用开发非常友好;
- 支持文件下载和上传,支持 sendfile 系统调用;
- 支持 gzip 压缩传输;
- 支持 pipelining ;
- 提供一个轻量的命令行工具 drogon_ctl,帮助简化各种类的创建和视图代码的生成过程;
- 基于 NIO 实现的异步数据库读写,目前支持 PostgreSQL 和 MySQL(MariaDB)数据库;
- 基于线程池实现 sqlite3 数据库的异步读写,提供与上文数据库相同的接口;
- 方便的轻量级 ORM 实现,支持常规的对象到数据库的双向映射操作;