自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個輕量級、高性能的 C++ Web 框架

開發(fā) 前端
說起 Web 開發(fā),大多數(shù)人會想到 Java、Python、Golang ... 因為它們的主流 Web 框架有很多,Java 有非常知名的 Spring 全家桶,Python 有大而全的 Django、小而精的 Flask、高性能的 Tornado,Golang 也有快速靈活的 Gin、Echo 等框架。

說起 Web 開發(fā),大多數(shù)人會想到 Java、Python、Golang ... 因為它們的主流 Web 框架有很多,Java 有非常知名的 Spring 全家桶,Python 有大而全的 Django、小而精的 Flask、高性能的 Tornado,Golang 也有快速靈活的 Gin、Echo 等框架。

相比之下,C/C++ 陣營則遜色不少。之前,我曾寫過一篇《C++ Web(HTTP)開發(fā) 10 大利器》,其中介紹了一些 C/C++ Web 框架。有一個名為 Oat++ 的很不錯,輕量、跨平臺、高性能、完全零依賴,非常值得學(xué)習(xí)!

1

Oat++ 介紹

要深入了解 Oat++,離不開這幾個網(wǎng)址:

  • Oat++ 主頁:https://oatpp.io
  • Oat++ 文檔:https://oatpp.io/docs/start
  • GitHub 地址:https://github.com/oatpp/oatpp

其主要特性有:

  • 隨處運行
  • Oat++ 沒有任何依賴性,可以很容易地移植到各種支持的平臺上(Linux、MacOS、Windows)。
  • 構(gòu)建健壯的api
  • 使用 Oat++ Simple-API,構(gòu)建靈活而健壯的 API 既簡單又有趣。
  • 處理 500 萬個連接
  • 使用 Oat++ Async-API,可以在單個服務(wù)器上處理超過 500 萬個并發(fā)連接。
  • 訪問數(shù)據(jù)庫
  • Oat++ ORM 提供了一種簡單而統(tǒng)一的方式來訪問數(shù)據(jù)庫
  • 保持代碼一致
  • Oat++ 在整個代碼庫中依靠對象映射來確保 API 和數(shù)據(jù)模型的一致性
  • 生成 API 文檔
  • 使用 Swagger-UI 和 OpenAPI 3.0.0 自動記錄 endpoints

最吸引我的是 HTTP/HTTPS、文件上傳/下載、以及強大的 Swagger API 功能。

 

2

編譯 Oat++

進入 Oat++ 的 GitHub 頁面,你會發(fā)現(xiàn) Star 多達 4K+,貢獻者有 30 多個,且最近幾天還有代碼提交,所以不用擔(dān)心熱度和活躍度,這個框架一直有人在積極地維護。

環(huán)境要求

Oat++ 的編譯過程很簡單,只需要有基本的開發(fā)環(huán)境就行了:

  • Git
  • 編譯器支持的 C++ 版本 >= 11
  • Make
  • CMake 版本 >= 3.1

如果沒有的話,按照下述步驟安裝,以 Ubuntu 為例:

  1. $ sudo apt install git 
  2.  
  3. $ sudo apt install cmake 
  4.  
  5. $ sudo apt install build-essential 

編譯安裝

下載 Oat++ 源碼:

  1. $ git clone https://github.com/oatpp/oatpp.git 

隨后,執(zhí)行編譯安裝四部曲:

  1. $ cd oatpp/ 
  2.  
  3. $ mkdir build && cd build 
  4.  
  5. $ cmake .. 
  6.  
  7. $ sudo make && sudo make install 

3

示例程序

 

為了演示 Oat++,我們從最簡單的“Hello, World!”開始!

創(chuàng)建一個 CMake 項目,CMakeLists.txt 配置如下:

  1. cmake_minimum_required(VERSION 3.1
  2.  
  3. project(helloworld) 
  4.  
  5. set(CMAKE_CXX_STANDARD 11
  6.  
  7. set(SOURCE_FILES main.cpp handler.h) 
  8.  
  9. # 查找 oatpp 依賴 
  10.  
  11. find_package(oatpp REQUIRED) 
  12.  
  13. add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 
  14.  
  15. # 將目標(biāo)文件與庫文件進行鏈接 
  16.  
  17. target_link_libraries(${PROJECT_NAME} oatpp::oatpp) 

默認情況下,Oat++ 會對客戶端請求響應(yīng) 404,除此之外什么都不做。

若要添加自定義響應(yīng),必須實現(xiàn) HttpRequestHandler:

  1. // handler.h 
  2.  
  3. #ifndef HANDLER_H 
  4.  
  5. #define HANDLER_H 
  6.  
  7. #include "oatpp/web/server/HttpRequestHandler.hpp" 
  8.  
  9. #define O_UNUSED(x) (void)x; 
  10.  
  11. // 自定義請求處理程序 
  12.  
  13. class Handler : public oatpp::web::server::HttpRequestHandler 
  14.  
  15.  
  16. public
  17.  
  18. // 處理傳入的請求,并返回響應(yīng) 
  19.  
  20. std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& request) override { 
  21.  
  22. O_UNUSED(request); 
  23.  
  24. return ResponseFactory::createResponse(Status::CODE_200, "Hello, World!"); 
  25.  
  26.  
  27. }; 
  28.  
  29. #endif // HANDLER_H 

有了處理程序之后,需要通過 Router 將請求路由到它:

  1. // main.cpp 
  2.  
  3. #include "oatpp/web/server/HttpConnectionHandler.hpp" 
  4.  
  5. #include "oatpp/network/tcp/server/ConnectionProvider.hpp" 
  6.  
  7. #include "oatpp/network/Server.hpp" 
  8.  
  9. #include "handler.h" 
  10.  
  11. void run() 
  12.  
  13.  
  14. // 為 HTTP 請求創(chuàng)建路由器 
  15.  
  16. auto router = oatpp::web::server::HttpRouter::createShared(); 
  17.  
  18. // 路由 GET - "/hello" 請求到處理程序 
  19.  
  20. router->route("GET""/hello", std::make_shared<Handler>()); 
  21.  
  22. // 創(chuàng)建 HTTP 連接處理程序 
  23.  
  24. auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router); 
  25.  
  26. // 創(chuàng)建 TCP 連接提供者 
  27.  
  28. auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost"8000, oatpp::network::Address::IP_4}); 
  29.  
  30. // 創(chuàng)建服務(wù)器,它接受提供的 TCP 連接并將其傳遞給 HTTP 連接處理程序 
  31.  
  32. oatpp::network::Server server(connectionProvider, connectionHandler); 
  33.  
  34. // 打印服務(wù)器端口 
  35.  
  36. OATPP_LOGI("MyApp""Server running on port %s", connectionProvider->getProperty("port").getData()); 
  37.  
  38. // 運行服務(wù)器 
  39.  
  40. server.run(); 
  41.  
  42.  
  43. int main() 
  44.  
  45.  
  46. // 初始化 oatpp 環(huán)境 
  47.  
  48. oatpp::base::Environment::init(); 
  49.  
  50. // 運行應(yīng)用 
  51.  
  52. run(); 
  53.  
  54. // 銷毀 oatpp 環(huán)境 
  55.  
  56. oatpp::base::Environment::destroy(); 
  57.  
  58. return 0
  59.  

 

4

請求驗證

 

運行程序,在瀏覽器中訪問 http://localhost:8000/hello,就會顯示“Hello, World!”信息了:

或者使用 curl 請求 http://127.0.0.1:8000/hello,效果一樣:

  1. $ curl http://127.0.0.1:8000/hello 
  2.  
  3. Hello, World! 

 

 

責(zé)任編輯:張燕妮 來源: 高效程序員
相關(guān)推薦

2025-01-26 15:44:29

2017-10-11 16:12:19

內(nèi)存

2020-10-13 18:09:22

開發(fā)框架開源

2023-06-28 08:16:50

Autofac應(yīng)用程序

2022-08-10 12:21:07

PythonWebBottle

2020-09-04 09:27:40

開源C++搜狗

2019-12-13 19:00:26

PekwmLinux桌面

2020-08-27 11:39:05

JavaRESTful Web編程語言

2023-06-13 13:38:00

FlaskPython

2023-12-12 13:50:00

代碼業(yè)務(wù)狀態(tài)

2022-06-06 22:23:26

Tina工具Markdown

2024-01-03 07:42:49

分割模型高性能

2025-04-17 04:00:00

SQLite-WebSQLite數(shù)據(jù)庫

2023-06-27 16:42:18

Tinygrad深度學(xué)習(xí)工具

2021-01-05 08:35:24

GNU nanoVim編輯器

2021-06-24 10:27:48

分布式架構(gòu)系統(tǒng)

2021-06-25 10:45:43

Netty 分布式框架 IO 框架

2011-08-25 15:35:18

Lua游戲對象

2024-06-07 10:34:28

Rust開發(fā)工具

2023-06-19 07:54:37

DotNetty網(wǎng)絡(luò)通信框架
點贊
收藏

51CTO技術(shù)棧公眾號