初识drogon

初识drogon

有一个给web框架做性能排名的网站,叫techempower,它在前段时间公布了2020年度最新的测试结果——Round19,我看到了后特别激动,因为这次测试的综合成绩的前三名中,有两名都来自中国(以往测试中,前几名都是老外研发的web框架)

注:techempower有两种测试环境,一个是物理机,一个是云服务器(上面第一张图是物理机的测试结果、第二张图是云服务器的测试结果)

可以看到,不管是跑在物理机还是云服务器,第一名都是drogon,另外前三名的may-minihttp,也同样是来自中国,它基于rust语言开发。

drogon名称的由来

drogon名称的由来

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

drogon的特点

drogon的特点

1. 基于C++14/17,易用性特别好

2. 跨平台,支持Linux,也支持macOS、FreeBSD,和Windows

3. 配备超高性能的数据库客户端,且支持常用数据库如PostgreSql、MySql、Sqlite……

4. 自研的高性能模板引擎CSP

5. 网络层使用基于epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高并发、高性能的网络IO。

6. 全异步编程模式;支持Http1.0/1.1(server端和client端);

7. 基于template实现了简单的反射机制,使主程序框架、控制器(controller)和视图(view)完全解耦;

8. 支持cookies和内建的session;

9. 支持后端渲染,把控制器生成的数据交给视图生成Html页面,视图由CSP模板文件描述,通过CSP标签把C++代码嵌入到Html页面,由drogon的命令行工具在编译阶段自动生成C++代码并编译;

10. 支持运行期的视图页面动态加载(动态编译和加载so文件);

11. 非常方便灵活的路径(path)到控制器处理函数(handler)的映射方案;

12. 支持过滤器(filter)链,方便在控制器之前执行统一的逻辑(如登录验证、Http Method约束验证等);

13. 支持https(基于OpenSSL实现);

14. 支持websocket(server端和client端);

15. 支持Json格式请求和应答, 对Restful API应用开发非常友好;支持文件下载和上传,支持sendfile系统调用;

16. 支持gzip/brotli压缩传输;

17. 支持pipelining;

18. 提供一个轻量的命令行工具drogon_ctl,帮助简化各种类的创建和视图代码的生成过程;

19. 基于非阻塞IO实现的异步数据库读写,目前支持PostgreSQL和MySQL(MariaDB)数据库;

20. 基于线程池实现sqlite3数据库的异步读写,提供与上文数据库相同的接口;

21. 支持ARM架构;

22. 方便的轻量级ORM实现,支持常规的对象到数据库的双向映射操作;

23. 支持插件,可通过配置文件在加载期动态拆装;

24. 支持内建插入点的AO维护活跃,对各种issue响应及时……

对数据库操作表现出来的高性能,是drogon的一大亮点。

说到这里,你是不是已经按捺不住,想进一步了解drogon了呢?赶紧去github上找到它、给它一个star吧。