Oatpp创建服务器项目(windows)

一、环境配置

1.vs2017(Oatpp需要c++11支持)

2.Oatpp-1.3.0源码

3.CMake(编译成lib的话需要使用)

 

二、构建lib的步骤

1.安装cmake

2.执行

3.打开项目可以编译

三、使用Oatpp开发http服务器

1.创建项目

2.添加Oatpp源码

3.配置项目---添加源码

 

4.添加修改个别文件的编译输出路径(会报同名错误)

warning MSB8027: 名为 *.cpp 的两个或更多文件将生成到同一位置的输出。

Oatpp有几个同名的文件需要修改,也可以在.vcxproj修改

<ClCompile Include="Oatpp\oatpp\core\async\Executor.cpp">

    <ObjectFileName>$(IntDir)/oatpp/core/async/Executor.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\core\async\Processor.cpp">

    <ObjectFileName>$(IntDir)/oatpp/core/async/Processor.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\core\data\buffer\Processor.cpp">

    <ObjectFileName>$(IntDir)/oatpp/core/data/buffer/Processor.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\core\data\mapping\ObjectMapper.cpp">

    <ObjectFileName>$(IntDir)/oatpp/core/data/mapping/ObjectMapper.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\network\ConnectionProvider.cpp">

    <ObjectFileName>$(IntDir)/oatpp/network/ConnectionProvider.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\network\tcp\server\ConnectionProvider.cpp">

    <ObjectFileName>$(IntDir)/oatpp/network/tcp/server/ConnectionProvider.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\network\virtual_\client\ConnectionProvider.cpp">

    <ObjectFileName>$(IntDir)/oatpp/network/virtual_/client/ConnectionProvider.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\network\virtual_\server\ConnectionProvider.cpp">

    <ObjectFileName>$(IntDir)/oatpp/network/virtual_/server/ConnectionProvider.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\orm\Executor.cpp">

    <ObjectFileName>$(IntDir)/oatpp/orm/Executor.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\parser\json\mapping\ObjectMapper.cpp">

    <ObjectFileName>$(IntDir)/oatpp/parser/json/mapping/ObjectMapper.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\web\protocol\http\incoming\Request.cpp">

    <ObjectFileName>$(IntDir)/oatpp/web/protocol/http/incoming/Request.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\web\protocol\http\incoming\Response.cpp">

    <ObjectFileName>$(IntDir)/oatpp/web/protocol/http/incoming/Response.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\web\protocol\http\outgoing\Request.cpp">

    <ObjectFileName>$(IntDir)/oatpp/web/protocol/http/outgoing/Request.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\web\protocol\http\outgoing\Response.cpp">

    <ObjectFileName>$(IntDir)/oatpp/web/protocol/http/outgoing/Response.cpp.obj</ObjectFileName>

</ClCompile>

<ClCompile Include="Oatpp\oatpp\network\tcp\client\ConnectionProvider.cpp">

    <ObjectFileName>$(IntDir)/oatpp/network/tcp/client/ConnectionProvider.cpp.obj</ObjectFileName>

</ClCompile>

5.添加库目录

wsock32.lib

ws2_32.lib

kernel32.lib

user32.lib

gdi32.lib

winspool.lib

shell32.lib

ole32.lib

oleaut32.lib

uuid.lib

comdlg32.lib

advapi32.lib

6.添加代码(案例)

handler.h

#pragma once

 

#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!");

}

};

 

#endif // HANDLER_H

main.cpp

//#include <stdio.h>

//#include <iostream>

 

#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", 8000, 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;

}

7.编译

8.测试

运行exe程序:

浏览器输入: http://127.0.0.1:8000/hello

 

warning MSB8027: 名为 *.cpp 的两个或更多文件将生成到同一位置的输出。这会导致错误的生成结果。

VC++编译源文件时默认全部输出(对象文件)到同一个目录下,遇到同名源文件覆盖前面的同名对象文件。为了解决这个问题,你可以设置输出路径与源文件路径类似。

右键项目->属性->配置属性->C/C++->输出文件->对象文件名,将$(IntDir)改为$(IntDir)\$(RelativeDir)\。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OATPP是一个C++ Web框架,它提供了许多现代化的Web开发特性,并且易于使用。下面是使用OATPP搭建Web服务器的步骤: 1. 安装OATPP库。可以通过以下命令在Ubuntu上安装: ``` $ sudo apt-get update $ sudo apt-get install liboatpp-1.1-dev ``` 2. 创建一个新的C++项目,并添加OATPP库的依赖。 3. 创建一个新的OATPP应用程序。可以通过以下代码创建: ```c++ #include "oatpp/oatpp.hpp" class MyController : public oatpp::web::server::api::ApiController { public: MyController(const std::shared_ptr<ObjectMapper>& objectMapper) : oatpp::web::server::api::ApiController(objectMapper) {} ENDPOINT("GET", "/", root) { return createResponse(Status::CODE_200, "Hello World!"); } }; ``` 该代码创建了一个名为MyController的控制器,它有一个名为root的处理函数。当收到GET请求并且路径为“/”时,该函数将返回一个带有“Hello World!”消息的HTTP响应。 4. 创建一个OATPP服务器实例。可以通过以下代码创建: ```c++ #include "oatpp/network/server/Server.hpp" void run() { oatpp::base::Environment::init(); /* Create Router */ auto router = oatpp::web::server::HttpRouter::createShared(); /* Add MyController */ auto myController = std::make_shared<MyController>(router->getObjectMapper()); router->addController(myController); /* Create HttpConnectionHandler */ auto connectionHandler = oatpp::network::server::HttpConnectionHandler::createShared(router); /* Create server */ oatpp::network::server::Server server(connectionHandler); /* Run server */ OATPP_LOGI("MyApp", "Server running on port %s", server.getAddress().toString().c_str()); server.run(); oatpp::base::Environment::destroy(); } ``` 该代码创建了一个名为“server”的OATPP服务器实例,并将其绑定到默认端口(8080)。它还将MyController添加到路由器中,并将路由器传递给HTTP连接处理程序。 5. 启动服务器。可以通过调用run()函数来启动服务器。 ```c++ int main() { run(); return 0; } ``` 现在,你已经成功地使用OATPP搭建了一个Web服务器,并可以通过发送GET请求并访问“http://localhost:8080/”来测试它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值