【C++】9.web应用:oatpp-web框架入门

2023-05-16

说到web开发,大家肯定会想到JS、Python,甚至Java,但应该不会想到C++。

用C++开发web也不是不行,这不,oatpp就是一个轻量、跨平台、高性能的web框架。

文章目录

    • 1. oatpp介绍
    • 2. 环境搭建
    • 3. 示例程序

1. oatpp介绍

官网:https://oatpp.io/
文档:https://oatpp.io/docs/start
github地址:https://github.com/oatpp/oatpp

oatpp可在Linux和Windows上通用,无需其他依赖。

在这里插入图片描述

2. 环境搭建

编译安装:

下载源码:
git clone https://github.com/oatpp/oatpp.git

编译:
cd oatpp
mkdir build && cd build
cmake ..
sudo make && sudo make install

在这里插入图片描述

3. 示例程序

运行一个基于oatpp框架的示例程序(响应hello world):

创建oatpp_demo目录,并创建CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
project(helloworld)
 
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp handler.h)
 
# 查找 oatpp 依赖
find_package(oatpp REQUIRED)
 
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
 
# 将目标文件与库文件进行链接
target_link_libraries(${PROJECT_NAME} oatpp::oatpp)

头文件handler.h,实现响应HttpRequestHandler:

// handler.h
#ifndef HANDLER_H
#define HANDLER_H
 
#include "oatpp/web/server/HttpRequestHandler.hpp"
 
#define O_UNUSED(x) (void)x;
 
// 自定义请求处理程序
class Handler : public oatpp::web::server::HttpRequestHandler
{
public:
    // 处理传入的请求,并返回响应
    std::shared_ptr<OutgoingResponse> handle(const std::shared_ptr<IncomingRequest>& request) override {
        O_UNUSED(request);
 
        return ResponseFactory::createResponse(Status::CODE_200, "Hello, World! This is oatpp_demo!");
    }
};
 
#endif // HANDLER_H

主程序main.cpp,提供路由Router请求:

// main.cpp
#include "oatpp/web/server/HttpConnectionHandler.hpp"
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
#include "oatpp/network/Server.hpp"
#include "handler.h"
 
void run()
{
    // 为 HTTP 请求创建路由器
    auto router = oatpp::web::server::HttpRouter::createShared();
 
    // 路由 GET - "/hello" 请求到处理程序
    router->route("GET", "/hello", std::make_shared<Handler>());
 
    // 创建 HTTP 连接处理程序
    auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);
 
    // 创建 TCP 连接提供者
    auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost", 8080, oatpp::network::Address::IP_4});
 
    // 创建服务器,它接受提供的 TCP 连接并将其传递给 HTTP 连接处理程序
    oatpp::network::Server server(connectionProvider, connectionHandler);
 
    // 打印服务器端口
    OATPP_LOGI("MyApp", "Server running on port %s", connectionProvider->getProperty("port").getData());
 
    // 运行服务器
    server.run();
}
 
int main()
{
    // 初始化 oatpp 环境
    oatpp::base::Environment::init();
 
    // 运行应用
    run();
 
    // 销毁 oatpp 环境
    oatpp::base::Environment::destroy();
 
    return 0;
}

cmake工程编译:

mkdir build && cd build
cmake ..
make

然后在浏览器打开:http://127.0.0.1:8080/hello

在这里插入图片描述

以上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】9.web应用:oatpp-web框架入门 的相关文章

随机推荐

  • 使用Galileo SDK跨局域网遥控机器人

    原链接 GalileoSDK是由我们开发的机器人导航系统SDK 通过SDK用户能够方便的操控机器人 现在小强用户已经可以免费体验到SDK的功能了 SDK内部集成了物联网连接功能 设置完成后用户能够通过SDK跨局域网遥控和获取机器人状态 下面
  • zcu102网口不通

    新建工程采用的板子默认配置 xff0c 启动后执行命令 xff1b dmesg grep ethernet 1 545671 macb ff0e0000 ethernet Not enabling partial store and for
  • zcu102开发板实现 虚拟jtag

    开发板zcu102 xff1b petalinux2020 1 需要自备一个FMC转JTAG的子卡 xff1b 此篇记录自己实现的过程 xff0c 以备查询 xff1b 1 整个流程连接 xff1a https xilinx wiki at
  • 查看ubuntu系统的版本信息、内存大小及使用、磁盘大小等常用命令

    一 ubuntu系统的版本信息 xff1a 方法 步骤 xff1a 1 进入Ubuntu系统 xff0c 点击左侧图标栏中的黑框 xff0c 打开终端 xff1b 2 左侧没有终端图标的情况 xff0c 可以搜索按钮 图中左侧第一个 xff
  • CentOS7 无法进入图形界面 黑屏

    问题现象描述 xff1a CentOS有界面的系统 xff0c 开机后进入界面 xff0c 在开机界面背景为 7 的地方卡住 xff0c 然后界面就黑掉 解决办法 xff1a 1 开机后 xff0c 按下 ctrl 43 alt 43 F2
  • 重装win10提示“Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装...”

    背景 xff1a 因为GHOST系统会捆绑大量软件 xff0c 主页被强制修改 xff0c 并且系统还可能存在删减的可能性 xff0c 所以越来越多的用户考虑安装官方MSDN原版系统 xff0c 但是呢 xff0c 近期总是有用户称自己在安
  • 在petalinux下提示:Failed to menu config project component....

    现象 xff1a 在petalinux下配置硬件描述语言时 xff0c 提示错误 xff1a 命令 xff1a petalinux config get hw description 61 hdf path 错误提示 xff1a ERROR
  • petalinux下修改系统空间笔记

    该文档是自己记录的笔记 xff0c 方便后面自己查看 在petalinux设置系统空间中需要注意的点 xff01 1 在menuconfig界面下设置系统空间为了在内核启动输出显示 xff1b Subsystem AUTO Hardware
  • PetaLinux 去除用户登陆 (Login into target without pass word)

    PetaLinux 自动登录登陆 1 初始化 PetaLinux 运行环境 xff1a source PetaLinux安装目录 settings sh 2 更改 PetaLinux 配置 xff1a 1 cd 到项目工程目录下 xff1b
  • PetaLinux 使用外部代码 (u-boot)

    背景 xff1a 在petalinux编译工程时 xff0c 我们可能有修改u boot源码的需求 xff0c 这时就需要我们使用外部的代码进行编译 实现步骤 xff1a 在配置前 xff0c 请确认我们已经在github上把对应的uboo
  • 异常的抛出和处理

    自定义输出异常 package error import java util ArrayList public class Exception public static void main String args TODO Auto ge
  • 在ROS中使用UDP进行通信

    原链接 ROS的网络通信提供了两种方式 xff0c 一种是TCP协议 xff0c 一种是UDP协议 默认采用TCP进行通信 但是在实际的WIFI网络使用中发现用户经常反馈客户端和机器人连接中断且无法重新建立连接 在ROS wiki中官方也有
  • 网络编程TCP/IP和UDP以及HTTP协议

    OSI的七层模型和TCP IP的四层模型 TCP IP协议是从OSI的七层模型中简化出来的 四层模型的详图 什么是HTTP协议 HTTP称为 超文本传输协议 是一种基于应用层的通信协议 xff0c 它允许将超文本标记语言 HTML 文档从W
  • 网络字节序之大小端(字节序与比特序)

    引言 xff1a 最近在网上看了很多博客 xff0c 想要深入了解大小端问题 xff0c 主要是做毕设时 xff0c RTP包协议的结构体定义有两种方式 xff0c 即大端和小端 但是一些博客并没有讲到理解大小端的本质问题 xff0c 在这
  • C++的编译流程

    C C 43 43 的编译流程 编译流程分为四个阶段 xff1a 预处理 编译 汇编 链接 以Linux系统下g 43 43 编译为例 xff1a 通过g 43 43 的选项可以查看过程中的每一步 预处理 xff1a 处理一些 号定义的命令
  • 【Autoware规控】Lattice规划节点

    文章目录 1 Lattice规划介绍2 相关代码 1 Lattice规划介绍 Lattice Planner 是一种基于栅格地图的规划算法 xff0c 通过搜索和优化实现路径规划的目的 Lattice Planner 的核心思想是将路径规划
  • 【Autoware规控】OpenPlanner规划节点

    文章目录 1 OpenPlanner介绍2 相关代码 1 OpenPlanner介绍 OpenPlanner是Autoware种使用的一种运动规划算法 xff0c 通过对全局路径采样后生成一系列的候选路径 xff0c 结合矢量地图 传感器结
  • 【C++】8.高效编程:Effective C++学习

    Effective C 43 43 改变程序与设计的55个具体做法 文章目录 1 将C 43 43 视为federation of languages xff08 语言联合体 xff09 2 用consts enums 和 inlines取
  • 【Qt web】内嵌CEF制作浏览器

    文章目录 1 CEF介绍2 环境配置3 示例程序 1 CEF介绍 Qt自带QWebEngine模块 xff0c 可以快速实现浏览器 xff0c 但在实际使用中 xff0c 某些AMD显卡电脑运行使用了QWebEngine的qt软件 xff0
  • 【C++】9.web应用:oatpp-web框架入门

    说到web开发 xff0c 大家肯定会想到JS Python xff0c 甚至Java xff0c 但应该不会想到C 43 43 用C 43 43 开发web也不是不行 xff0c 这不 xff0c oatpp就是一个轻量 跨平台 高性能的