說起 Web 開發(fā),大多數(shù)人會(huì)想到 Java、Python、Golang ...
因?yàn)樗鼈兊闹髁?Web 框架有很多,Java 有非常知名的 Spring 全家桶,Python 有大而全的 Django、小而精的 Flask、高性能的 Tornado,Golang 也有快速靈活的 Gin、Echo 等框架。
相比之下,C/C++ 陣營(yíng)則遜色不少。之前,我曾寫過一篇《C++ Web(HTTP)開發(fā) 10 大利器》,其中介紹了一些 C/C++ Web 框架。有一個(gè)名為Oat++
的很不錯(cuò),輕量、跨平臺(tái)、高性能、完全零依賴
,非常值得學(xué)習(xí)!
Oat++ 介紹
要深入了解Oat++,離不開這幾個(gè)網(wǎng)址:
-
Oat++ 主頁(yè):https://oatpp.io
-
Oat++ 文檔:https://oatpp.io/docs/start
-
GitHub 地址:https://github.com/oatpp/oatpp
其主要特性有:
-
隨處運(yùn)行
Oat++ 沒有任何依賴性,可以很容易地移植到各種支持的平臺(tái)上(Linux、MacOS、Windows)。 -
構(gòu)建健壯的api
使用 Oat++ Simple-API,構(gòu)建靈活而健壯的 API 既簡(jiǎn)單又有趣。 -
處理 500 萬個(gè)連接
使用 Oat++ Async-API,可以在單個(gè)服務(wù)器上處理超過 500 萬個(gè)并發(fā)連接。 -
訪問數(shù)據(jù)庫(kù)
Oat++ ORM 提供了一種簡(jiǎn)單而統(tǒng)一的方式來訪問數(shù)據(jù)庫(kù) -
保持代碼一致
Oat++ 在整個(gè)代碼庫(kù)中依靠對(duì)象映射來確保 API 和數(shù)據(jù)模型的一致性 -
生成 API 文檔
使用 Swagger-UI 和 OpenAPI 3.0.0 自動(dòng)記錄 endpoints
最吸引我的是 HTTP/HTTPS、文件上傳/下載、以及強(qiáng)大的 Swagger API 功能。
2
編譯 Oat++
進(jìn)入 Oat++ 的 GitHub 頁(yè)面,你會(huì)發(fā)現(xiàn) Star 多達(dá) 4K+,貢獻(xiàn)者有 30 多個(gè),且最近幾天還有代碼提交,所以不用擔(dān)心熱度和活躍度,這個(gè)框架一直有人在積極地維護(hù)。
環(huán)境要求
Oat++ 的編譯過程很簡(jiǎn)單
,只需要有基本的開發(fā)環(huán)境就行了:
-
Git
-
編譯器支持的 C++ 版本 >= 11
-
Make
-
CMake 版本 >= 3.1
如果沒有的話,按照下述步驟安裝,以 Ubuntu 為例:
$sudoaptinstallgit
$sudoaptinstallcmake
$sudoaptinstallbuild-essential
編譯安裝
下載 Oat++ 源碼:
$gitclonehttps://github.com/oatpp/oatpp.git
隨后,執(zhí)行編譯安裝四部曲:
$cdoatpp/
$mkdirbuild&&cdbuild
$cmake..
$sudomake&&sudomakeinstall
3
示例程序
為了演示 Oat++,我們從最簡(jiǎn)單的“Hello, World!”
開始!
創(chuàng)建一個(gè) CMake 項(xiàng)目,CMakeLists.txt 配置
如下:
cmake_minimum_required(VERSION3.1)
project(helloworld)
set(CMAKE_CXX_STANDARD11)
set(SOURCE_FILESmain.cpphandler.h)
#查找oatpp依賴
find_package(oatppREQUIRED)
add_executable(${PROJECT_NAME}${SOURCE_FILES})
#將目標(biāo)文件與庫(kù)文件進(jìn)行鏈接
target_link_libraries(${PROJECT_NAME}oatpp::oatpp)
默認(rèn)情況下,Oat++ 會(huì)對(duì)客戶端請(qǐng)求響應(yīng) 404,除此之外什么都不做。
若要添加自定義響應(yīng),必須實(shí)現(xiàn) HttpRequestHandler:
//handler.h
#ifndefHANDLER_H
#defineHANDLER_H
#include"oatpp/web/server/HttpRequestHandler.hpp"
#defineO_UNUSED(x)(void)x;
//自定義請(qǐng)求處理程序
classHandler:publicoatpp::HttpRequestHandler
{
public:
//處理傳入的請(qǐng)求,并返回響應(yīng)
std::shared_ptrhandle(conststd::shared_ptr&request)override{
O_UNUSED(request);
returnResponseFactory::CODE_200,"Hello,World!");
}
};
#endif//HANDLER_H
有了處理程序之后,需要通過 Router 將請(qǐng)求路由到它:
//main.cpp
#include"oatpp/web/server/HttpConnectionHandler.hpp"
#include"oatpp/network/tcp/server/ConnectionProvider.hpp"
#include"oatpp/network/Server.hpp"
#include"handler.h"
voidrun()
{
//為HTTP請(qǐng)求創(chuàng)建路由器
autorouter=oatpp::createShared();
//路由GET-"/hello"請(qǐng)求到處理程序
router->route("GET","/hello",std::make_shared());
//創(chuàng)建HTTP連接處理程序
autoconnectionHandler=oatpp::createShared(router);
//創(chuàng)建TCP連接提供者
autoconnectionProvider=oatpp::createShared({"localhost",8000,oatpp::IP_4});
//創(chuàng)建服務(wù)器,它接受提供的TCP連接并將其傳遞給HTTP連接處理程序
oatpp::Serverserver(connectionProvider,connectionHandler);
//打印服務(wù)器端口
OATPP_LOGI("MyApp","Serverrunningonport%s",connectionProvider->getProperty("port").getData());
//運(yùn)行服務(wù)器
server.run();
}
intmain()
{
//初始化oatpp環(huán)境
oatpp::init();
//運(yùn)行應(yīng)用
run();
//銷毀oatpp環(huán)境
oatpp::destroy();
return0;
}
4
請(qǐng)求驗(yàn)證
運(yùn)行程序,在瀏覽器中訪問http://localhost:8000/hello,就會(huì)顯示“Hello, World!”信息了:
或者使用 curl 請(qǐng)求http://127.0.0.1:8000/hello,效果一樣:
$curlhttp://127.0.0.1:8000/hello
Hello,World!
責(zé)任編輯:haq-
Web
+關(guān)注
關(guān)注
2文章
1276瀏覽量
70436 -
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74500
原文標(biāo)題:一個(gè)輕量級(jí)、高性能的 C++ Web 框架
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
源代碼加密、源代碼防泄漏c/c++與git服務(wù)器開發(fā)環(huán)境

Spire.XLS for C++組件說明

AKI跨語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT
華為云 Flexus X 實(shí)例部署安裝 HivisionIDPhoto 一個(gè)輕量級(jí)的 AI 證件照制作算法

HarmonyOS Web開發(fā)性能優(yōu)化指導(dǎo)
如何使用高性能浮點(diǎn)TMS320C67x DSP立即開始開發(fā)

為了學(xué)習(xí)內(nèi)核開發(fā),大佬手搓了一個(gè)輕量級(jí)操作系統(tǒng)YiYiYa OS
國(guó)產(chǎn)芯上運(yùn)行TinyMaxi輕量級(jí)的神經(jīng)網(wǎng)絡(luò)推理庫(kù)-米爾基于芯馳D9國(guó)產(chǎn)商顯板
基于Openharmony輕量級(jí)操作系統(tǒng)的分布式數(shù)據(jù)管理開發(fā)案例

C++中實(shí)現(xiàn)類似instanceof的方法

鴻蒙語(yǔ)言基礎(chǔ)類庫(kù):ohos.data.storage 輕量級(jí)存儲(chǔ)
國(guó)產(chǎn)芯上運(yùn)行TinyMaxi輕量級(jí)的神經(jīng)網(wǎng)絡(luò)推理庫(kù)-米爾基于芯馳D9國(guó)產(chǎn)商顯板

深度詳解嵌入式系統(tǒng)專用輕量級(jí)框架設(shè)計(jì)

未來輕量級(jí)深度學(xué)習(xí)技術(shù)探索

評(píng)論