一、Drogon是一個基於C++14/17的Http應用框架,使用Drogon可以方便的使用C++構建各種型別的Web應用服務端程式。 本版本庫是github上Drogon工程的映象庫。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
/file/2020/08/21/20200821225641_1623.jpg 其安裝環境比較麻煩。故選擇用docker搭建開發環境
#docker pull drogonf ramework/drogon
docker run -p 8778:8777 -V /Users/apple/data/drogon:/data/drogon -it drogonf ramework/drogon /bin/bash
將本地8778埠對映到容器的8777 ,本地的 /Users/apple/data/drogon目錄 對映到容器的 /data/drogon同時進入到 容器bash
drogon_ctl create project first#建立專案
drogon_ctl create project your_project_name
.新建項目錄為下面
├── 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埠啟動。
然後構建專案:
cd build
cmake ..
make
在build建立index.html
在 echo '<h1>Hello Drogon!</h1>' >>index.html
執行專案
./first
在本地伺服器開啟:http://localhost:8778發現專案啟動。