TFB 测试排名第一!这个 C++ 的 Web 框架有点东西

全球 Web 框架权威性能测试 Techempower Web Framework Benchmarks 相信大家多少都听说过,这是一个专为 Web 框架做性能排名的网站,通过物理机和云服务器上的测试来检测框架的性能。

今天推荐的这款框架就是在 Techempower Web Framework Benchmarks 的最新排名中排到了第一名,值得大家尝试和学习。

TFB 测试排名第一!这个 C++ 的 Web 框架有点东西

 

项目名称:Drogon

项目作者:an-tao

开源许可协议:MIT

项目地址:https://gitee.com/an-tao/drogon

 

项目简介

Drogon 是一个基于 C++14/17 的 Http 应用框架,使用 Drogon 可以方便的使用 C++ 构建各种类型的 Web 应用服务端程序。

Drogon 是作者非常喜欢的美剧《权力的游戏》中的一条龙的名字(汉译作卓耿),和龙有关但并不是 dragon 的误写,为了不至于引起不必要的误会这里说明一下。

 

项目特点

Drogon 是一个跨平台框架,它支持 Linux,也支持 macOS、FreeBSD,和Windows。它的主要特点如下:

  • 网络层使用基于 epoll(macOS/FreeBSD下是kqueue)的非阻塞 IO 框架,提供高并发、高性能的网络 IO。详细请见 TFB Tests Results
  • 全异步编程模式;
  • 支持 Http1.0/1.1(server端和client端);
  • 基于 template 实现了简单的反射机制,使主程序框架、控制器(controller)和视图(view)完全解耦;
  • 支持cookies和内建的session;
  • 支持后端渲染,把控制器生成的数据交给视图生成Html页面,视图由CSP模板文件描述,通过CSP标签把C++代码嵌入到Html页面,由drogon的命令行工具在编译阶段自动生成C++代码并编译;
  • 支持运行期的视图页面动态加载(动态编译和加载so文件);
  • 非常方便灵活的路径(path)到控制器处理函数(handler)的映射方案;
  • 支持过滤器(filter)链,方便在控制器之前执行统一的逻辑(如登录验证、Http Method约束验证等);
  • 支持https(基于OpenSSL实现);
  • 支持websocket(server端和client端);
  • 支持Json格式请求和应答, 对Restful API应用开发非常友好;
  • 支持文件下载和上传,支持sendfile系统调用;
  • 支持gzip/brotli压缩传输;
  • 支持pipelining;
  • 提供一个轻量的命令行工具drogon_ctl,帮助简化各种类的创建和视图代码的生成过程;
  • 基于非阻塞IO实现的异步数据库读写,目前支持PostgreSQL和MySQL(MariaDB)数据库;
  • 基于线程池实现sqlite3数据库的异步读写,提供与上文数据库相同的接口;
  • 支持ARM架构;
  • 方便的轻量级ORM实现,支持常规的对象到数据库的双向映射操作;
  • 支持插件,可通过配置文件在加载期动态拆装;
  • 支持内建插入点的AOP

 

代码示例

不像大多数C++框架那样,drogon的主程序可以保持非常简单。 Drogon使用了一些小技巧使主程序和控制器解耦合. 控制器的路由设置可以在控制器类中定义或者配置文件中完成.

下面是一个典型的主程序的样子:

#include <drogon/drogon.h>
using namespace drogon;
int main()
{
    app().setLogPath("./")
         .setLogLevel(trantor::Logger::kWarn)
         .addListener("0.0.0.0", 80)
         .setThreadNum(16)
         .enableRunAsDaemon()
         .run();
}

如果使用配置文件,可以进一步简化成如下的样子:

#include <drogon/drogon.h>
using namespace drogon;
int main()
{
    app().loadConfigFile("./config.json").run();
}

当然,Drogon也提供了一些接口,使用户可以在main()函数中直接添加控制器逻辑,如果你想要了解更多便捷的使用方法,就点击后面的链接前往项目主页看看吧:https://gitee.com/an-tao/drogon