0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++ Web開發(fā)中一個輕量級、高性能的大利器

Linux愛好者 ? 來源:高效程序員 ? 作者:Waleon ? 2021-10-29 10:40 ? 次閱讀

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

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

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 為例:

$sudoaptinstallgit
$sudoaptinstallcmake
$sudoaptinstallbuild-essential

編譯安裝

下載 Oat++ 源碼:

$gitclonehttps://github.com/oatpp/oatpp.git

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

$cdoatpp/
$mkdirbuild&&cdbuild
$cmake..
$sudomake&&sudomakeinstall

3

示例程序

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

創(chuàng)建一個 CMake 項目,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)文件與庫文件進行鏈接
target_link_libraries(${PROJECT_NAME}oatpp::oatpp)

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

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

//handler.h
#ifndefHANDLER_H
#defineHANDLER_H

#include"oatpp/web/server/HttpRequestHandler.hpp"

#defineO_UNUSED(x)(void)x;

//自定義請求處理程序
classHandler:publicoatpp::HttpRequestHandler
{
public:
//處理傳入的請求,并返回響應(yīng)
std::shared_ptrhandle(conststd::shared_ptr&request)override{
O_UNUSED(request);

returnResponseFactory::CODE_200,"Hello,World!");
}
};

#endif//HANDLER_H
有了處理程序之后,需要通過 Router 將請求路由到它:
//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請求創(chuàng)建路由器
autorouter=oatpp::createShared();

//路由GET-"/hello"請求到處理程序
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());

//運行服務(wù)器
server.run();
}

intmain()
{
//初始化oatpp環(huán)境
oatpp::init();

//運行應(yīng)用
run();

//銷毀oatpp環(huán)境
oatpp::destroy();

return0;
}

4

請求驗證

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

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

$curlhttp://127.0.0.1:8000/hello
Hello,World!
責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1253

    瀏覽量

    69059
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73302

原文標(biāo)題:一個輕量級、高性能的 C++ Web 框架

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    為了學(xué)習(xí)內(nèi)核開發(fā),大佬手搓了輕量級操作系統(tǒng)YiYiYa OS

    /kernel。 在移植適配的時候基本上和這些模塊打交道比較多,同時單獨庫可以提高內(nèi)核代碼復(fù)用性,內(nèi)核有專門的內(nèi)核庫,以便增加代碼安全,減少出錯。 01 支持荔枝派系列開發(fā)板,全志V3s,F(xiàn)1
    發(fā)表于 08-30 14:57

    基于Openharmony輕量級操作系統(tǒng)的分布式數(shù)據(jù)管理開發(fā)案例

    實驗內(nèi)容本例程演示如何在小凌派-RK2206開發(fā)板上使用OpenHarmony輕量級操作系統(tǒng)進行KvStore(即分布式數(shù)據(jù)管理)數(shù)據(jù)讀寫。例程:(1)創(chuàng)建兩線程,
    的頭像 發(fā)表于 08-07 08:23 ?629次閱讀
    基于Openharmony<b class='flag-5'>輕量級</b>操作系統(tǒng)的分布式數(shù)據(jù)管理<b class='flag-5'>開發(fā)</b>案例

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

    MR 框架是專為嵌入式系統(tǒng)設(shè)計的輕量級框架。充分考慮了嵌入式系統(tǒng)在資源和性能方面的需求。通過提供標(biāo)準(zhǔn)化的設(shè)備管理接口,極大簡化了嵌入式應(yīng)用開發(fā)的難度,幫助開發(fā)者快速構(gòu)建嵌入式應(yīng)用程序。
    發(fā)表于 04-27 02:32 ?701次閱讀
    深度詳解嵌入式系統(tǒng)專用<b class='flag-5'>輕量級</b>框架設(shè)計

    鴻蒙OS開發(fā)實例:【Native C++

    使用DevEco Studio創(chuàng)建Native C++應(yīng)用。應(yīng)用采用Native C++模板,實現(xiàn)使用NAPI調(diào)用C標(biāo)準(zhǔn)庫的功能。使用
    的頭像 發(fā)表于 04-14 11:43 ?2173次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>實例:【Native <b class='flag-5'>C++</b>】

    百度智能云推出全新輕量級大模型

    在近日舉辦的百度智能云千帆產(chǎn)品發(fā)布會上,三款全新的輕量級大模型——ERNIE Speed、ERNIE Lite以及ERNIE Tiny,引起了業(yè)界的廣泛關(guān)注。相較于傳統(tǒng)的千億級別參數(shù)大模型,這些輕量級大模型在參數(shù)量上有了顯著減少,為客戶提供了更加靈活和經(jīng)濟高效的解決方案。
    的頭像 發(fā)表于 03-22 10:28 ?517次閱讀

    C++在Linux內(nèi)核開發(fā)中從爭議到成熟

    Linux 內(nèi)核郵件列表中一篇已有六年歷史的老帖近日再次引發(fā)激烈討論 —— 主題是建議將 Linux 內(nèi)核的開發(fā)語言從 C 轉(zhuǎn)換為更現(xiàn)代的 C++
    的頭像 發(fā)表于 01-31 14:11 ?492次閱讀
    <b class='flag-5'>C++</b>在Linux內(nèi)核<b class='flag-5'>開發(fā)</b>中從爭議到成熟

    輕量級數(shù)據(jù)庫有哪些類型

    關(guān)系型數(shù)據(jù)庫是目前最常見的數(shù)據(jù)庫類型,它將數(shù)據(jù)以表的形式存儲,并使用SQL語言進行數(shù)據(jù)的管理和查詢。雖然關(guān)系型數(shù)據(jù)庫通常較為龐大和復(fù)雜,但仍有輕量級的關(guān)系型數(shù)據(jù)庫可供選用。例如SQLite,它是
    的頭像 發(fā)表于 12-20 11:29 ?1015次閱讀

    c++怎么開始編程

    C++種高級的、通用的編程語言,用于開發(fā)各種類型的應(yīng)用程序。它是從C語言演變而來,也是種靜態(tài)類型語言,可以在不同的平臺上進行
    的頭像 發(fā)表于 11-27 15:56 ?739次閱讀

    Linux輕量級工具集合Busybox的特點和使用

    Busybox是開源的、輕量級的軟件工具集合,旨在提供精簡的Unix工具集,適用于嵌入式系統(tǒng)和資源受限的環(huán)境。它將許多常用的Unix
    的頭像 發(fā)表于 11-10 09:50 ?1215次閱讀

    高性能C++編程的核心要點

    也有助于降低能耗、減少散熱問題,延長硬件使用壽命。 Linux環(huán)境下C++程序的特點 Linux操作系統(tǒng)具有開源、穩(wěn)定、高效的特點,成為C++程序員的首選開發(fā)環(huán)境。在Linux環(huán)境下,C++
    的頭像 發(fā)表于 11-09 11:29 ?565次閱讀

    C++20無棧協(xié)程超輕量高性能異步庫開發(fā)實戰(zhàn)

    c++20出來有段時間了。其中一大功能就是終于支持協(xié)程了(c++作為行業(yè)大哥大級別的語言,居然到C++20才開始支持協(xié)程,我也是無力吐槽了
    的頭像 發(fā)表于 11-09 10:20 ?914次閱讀

    基于Python 輕量級ORM框架

    ORM框架使用最廣泛的就是SQLAlchemy和Django自帶的ORM框架,但是SQLAlchemy的語法顯然相對Django的ORM框架麻煩點。 而Django本身是web
    的頭像 發(fā)表于 11-01 11:17 ?510次閱讀
    基于Python <b class='flag-5'>輕量級</b>ORM框架

    超級方便的輕量級Python流水線工具

    Mara-pipelines 是輕量級的數(shù)據(jù)轉(zhuǎn)換框架,具有透明和低復(fù)雜性的特點。其他特點如下: 基于非常簡單的Python代碼就能完成流水線開發(fā)。 使用 PostgreSQL 作為
    的頭像 發(fā)表于 10-31 11:26 ?545次閱讀
    超級方便的<b class='flag-5'>輕量級</b>Python流水線工具

    Mara-pipelines:輕量級的數(shù)據(jù)轉(zhuǎn)換框架

    Mara-pipelines 是輕量級的數(shù)據(jù)轉(zhuǎn)換框架,具有透明和低復(fù)雜性的特點。其他特點如下: 基于非常簡單的Python代碼就能完成流水線開發(fā)。 使用 PostgreSQL 作為
    的頭像 發(fā)表于 10-30 10:47 ?474次閱讀
    Mara-pipelines:<b class='flag-5'>輕量級</b>的數(shù)據(jù)轉(zhuǎn)換框架

    輕量級的權(quán)限認證框架:Sa-Token

    Java有很多優(yōu)秀的權(quán)限認證框架,如 Apache Shiro 、 Spring Security 等,但是集成起來實在是有些復(fù)雜;今天給大家介紹輕量級的權(quán)限認證框架:Sa-Token,只需引入
    的頭像 發(fā)表于 09-30 16:46 ?1569次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>輕量級</b>的權(quán)限認證框架:Sa-Token