
一、Drogon是一個(gè)基于C++14/17的Http應(yīng)用框架,使用Drogon可以方便的使用C++構(gòu)建各種類型的Web應(yīng)用服務(wù)端程序。 本版本庫(kù)是github上Drogon工程的鏡像庫(kù)。Drogon是作者非常喜歡的美劇《權(quán)力的游戲》中的一條龍的名字(漢譯作卓耿),和龍有關(guān)但并不是dragon的誤寫,為了不至于引起不必要的誤會(huì)這里說明一下。
Drogon是一個(gè)跨平臺(tái)框架,它支持linux,也支持macOS、FreeBSD,和windows。
二、它的主要特點(diǎn)如下:
網(wǎng)絡(luò)層使用基于epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高并發(fā)、高性能的網(wǎng)絡(luò)IO。詳細(xì)請(qǐng)見TFB Tests Results;
全異步編程模式;
支持Http1.0/1.1(server端和client端);
基于template實(shí)現(xiàn)了簡(jiǎn)單的反射機(jī)制,使主程序框架、控制器(controller)和視圖(view)完全解耦;
支持cookies和內(nèi)建的session;
支持后端渲染,把控制器生成的數(shù)據(jù)交給視圖生成html頁(yè)面,視圖由CSP模板文件描述,通過CSP標(biāo)簽把C++代碼嵌入到Html頁(yè)面,由drogon的命令行工具在編譯階段自動(dòng)生成C++代碼并編譯;
支持運(yùn)行期的視圖頁(yè)面動(dòng)態(tài)加載(動(dòng)態(tài)編譯和加載so文件);
非常方便靈活的路徑(path)到控制器處理函數(shù)(handler)的映射方案;
支持過濾器(filter)鏈,方便在控制器之前執(zhí)行統(tǒng)一的邏輯(如登錄驗(yàn)證、Http Method約束驗(yàn)證等);
支持https(基于OpenSSL實(shí)現(xiàn));
支持websocket(server端和client端);
支持Json格式請(qǐng)求和應(yīng)答, 對(duì)Restful API應(yīng)用開發(fā)非常友好;
支持文件下載和上傳,支持sendfile系統(tǒng)調(diào)用;
支持gzip/brotli壓縮傳輸;
支持pipelining;
提供一個(gè)輕量的命令行工具drogon_ctl,幫助簡(jiǎn)化各種類的創(chuàng)建和視圖代碼的生成過程;
基于非阻塞IO實(shí)現(xiàn)的異步數(shù)據(jù)庫(kù)讀寫,目前支持PostgreSQL和MySQL(MariaDB)數(shù)據(jù)庫(kù);
基于線程池實(shí)現(xiàn)sqlite3數(shù)據(jù)庫(kù)的異步讀寫,提供與上文數(shù)據(jù)庫(kù)相同的接口;
支持ARM架構(gòu);
方便的輕量級(jí)ORM實(shí)現(xiàn),支持常規(guī)的對(duì)象到數(shù)據(jù)庫(kù)的雙向映射操作;
支持插件,可通過配置文件在加載器動(dòng)態(tài)拆裝;
支持內(nèi)建插入點(diǎn)的AOP
https://gitee.com/an-tao/drogon?_from=gitee_search
三、 其安裝環(huán)境比較麻煩。故選擇用Docker搭建開發(fā)環(huán)境
#docker pull drogonf ramework/drogon
docker run -p 8778:8777 -v /Users/Apple/data/drogon:/data/drogon -it drogonframework/drogon /bin/bash
將本地8778端口映射到容器的8777 ,本地的 /Users/apple/data/drogon目錄 映射到容器的 /data/drogon同時(shí)進(jìn)入到 容器bash
drogon_ctl create project first#創(chuàng)建項(xiàng)目
drogon_ctl create project your_project_name
.新建項(xiàng)目錄為下面
├── CMakeLists.txt
├── build
├── config.json
├── controllers
├── filters
├── main.cc
├── models
│ └── model.json
├── plugins
└── views
修改main.cc
cat main.cc
#include <drogon/drogon.h>
int main() {
//Set HTTP listener address and port
drogon::app().addListener("0.0.0.0",8777);
//Load config file
//drogon::app().loadConfigFile("../config.json");
//Run HTTP framework,the method will block in the internal event loop
drogon::app().run();
return 0;
}
8777表示用8777端口啟動(dòng)。
然后構(gòu)建項(xiàng)目:
cd build
cmake ..
make
在build創(chuàng)建index.html
在 echo '<h1>Hello Drogon!</h1>' >>index.html
運(yùn)行項(xiàng)目
./first
在本地服務(wù)器打開:http://localhost:8778發(fā)現(xiàn)項(xiàng)目啟動(dòng)。
dr.png






