51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

C++ Web Framework Oat++ Hello World

Oat++ 是一个开源的 C++ Web 开发框架,接下来通过几篇文章了解下该框架的工作过程以及使用方法。文章主要内容包括:

  1. Oat++ 安装过程
  2. Oat++ 基本使用

Document:Oat++ (oatpp.io)

  1. Oat++ 安装过程 {#title-0} ========================

开发框架给我们提供了丰富的开发底层支持代码,安装的目的即是将这些支持代码库安装到本机,方便我们开发时候调用。Oat++ 的安装较为简单,官方给出的安装链接:Installation on Unix/Linux | Oat++ (oatpp.io)

安装时候先根据平台安装好 git、以及C++的编译套件,不同的系统安装方法大同小异,如下:

Ubuntu:

$ apt-get install git
$ apt-get install cmake
$ apt-get install build-essential

Centos、Fedora:

$ yum install git
$ yum install cmake
$ yum install gcc gcc-c++ make
$ yum install libatomic

Alpine:

$ apk add git
$ apk add cmake
$ apk add g++
$ apk add make

安装好必要的软件软件,接下来通过下面的过程安装 Oat++,如下命令:

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

$ mkdir build && cd build

$ cmake .. $ make install

至此,安装部分结束。

  1. Oat++ 基本使用 {#title-1} ========================

我们接下来通过 Oat++ 实现请求不同的 URL 服务,在浏览器显示不同的内容。我们设计请求 URL 如下:

  1. 请求 localhost:8000/hello1 显示 Hello Handler1
  2. 请求 localhost:8000/hello2 显示 Hello Handler2

主要类的作用:

  1. HttpRequestHandler 定义请求 URL 的处理函数;
  2. HttpRouter 用于 URL 和 HttpRequestHandler 的关联;
  3. HttpConnectionHandler 服务器连接处理
  4. ConnectionProvider 服务器监听参数
  5. Server 服务监听

CMakeLists.txt

include_directories(/usr/local/include/oatpp-1.3.0/oatpp)
cmake_minimum_required(VERSION 3.18)
project(oatpp_hello_world)

set(CMAKE_CXX_STANDARD 11)

add_executable(oatpp_hello_world main.cpp) target_link_libraries(oatpp_hello_world /usr/local/lib/oatpp-1.3.0/liboatpp.a)

具体代码含义在示例中给出了注释,示例代码:

#include "oatpp/web/server/HttpConnectionHandler.hpp"
#include "oatpp/network/Server.hpp"
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
#include "oatpp/web/server/HttpRouter.hpp"
#include "oatpp/web/server/HttpRequestHandler.hpp"

// 请求 URL 对应的处理类为 HttpRequestHandler 的子类 // 在子类中需要实现负类的 virtual 函数 handle,该函数为实际调用的处理函数 class Handler1 : public oatpp::web::server::HttpRequestHandler { public: std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& request) override { (void)request; // createResponse 函数用于构建响应报文 // oatpp::web::server::HttpRequestHandler::ResponseFactory // oatpp::web::server::HttpRequestHandler::Status // createResponse 存在 3 个重载方法,如下: // 下面两种方法返回的是 text 格式内容 // static std::shared_ptr<Response> createResponse(const Status &status); // static std::shared_ptr<Response> createResponse(const Status& status, const oatpp::String& text); // 下面重载的方法可以通过传递第三个参数使得返回 json 格式内容 // static std::shared_ptr<Response> createResponse(const Status& status, const oatpp::Void& dto, const std::shared_ptr<data::mapping::ObjectMapper>& objectMapper); return ResponseFactory::createResponse(Status::CODE_200, "Hello Handler1"); } }; class Handler2 : public oatpp::web::server::HttpRequestHandler { public: std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& request) override { (void)request; return ResponseFactory::createResponse(Status::CODE_200, "Hello Handler2"); } };

void run() {

// 1. 创建路由对象
auto router = oatpp::web::server::HttpRouter::createShared();
// 共享指针能够使得动态对象具备拷贝和移动语义,并且能够自动管理内存,避免内存泄漏
// 第一个参数为请求方法、第二个参数请求 URL、第三个参数为请求处理对象
router-&gt;route(&quot;GET&quot;, &quot;/hello1&quot;, std::make_shared&lt;Handler1&gt;());
router-&gt;route(&quot;GET&quot;, &quot;/hello2&quot;, std::make_shared&lt;Handler2&gt;());

// 2. 连接处理对象 // 服务器接受得到连接之后,交给 HttpConnectionHandler 来处理连接 auto conn_handler = oatpp::web::server::HttpConnectionHandler::createShared(router);

// 3. 套接字监听参数 auto address = oatpp::network::Address({&quot;localhost&quot;, 8000, oatpp::network::Address::IP_4}); auto conn_provider = oatpp::network::tcp::server::ConnectionProvider::createShared(address);

// 4. 构建服务对象 oatpp::network::Server server(conn_provider, conn_handler);

// 5. 服务启动信息 OATPP_LOGI(&quot;Oat++ Demo&quot;, &quot; 服务器在端口 %s 监听...&quot;, conn_provider-&gt;getProperty(&quot;port&quot;).getData());

// 6. 启动服务等待连接 server.run();

}

int main() {

oatpp::base::Environment::init();
run();
oatpp::base::Environment::destroy();

return 0;

}


赞(4)
未经允许不得转载:工具盒子 » C++ Web Framework Oat++ Hello World