Drogon框架的测试记录

主要为了探究以下几个问题

目录

1.Drogon的安装配置

2.Drogon的使用

1.创建http控制器

2.观察http控制器

3.创建websocket控制器

4.中间件和过滤器



1.Drogon的安装配置

经历了多次失败,目前发现的比较可行的安装方法如下(官方的vcpkg安装),失败的方法:drogon的直接zip下载、conan下载:

1.下载cmake,在电脑上安装cmake,然后添加到设置-系统环境变量-系统变量的path中

2.安装vcpkg,网络不好就直接去github上下载zip,然后解压并切换到路径去执行第三条指令

git clone https://github.com/microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.bat

3.在vcpkg中安装drogon(注意,使用64位的cmd)

vcpkg install drogon:x64-windows

有可能报错powershell,解决方案是去github下载powershell7(x64),然后用这个x64的powershell去执行第三步

4.检查C:\Users\xxx\vcpkg-master\installed\x64-windows\tools,如果没有drogon(我就是),那么要

vcpkg install drogon[ctl]:x64-windows

5.设置-系统环境变量-系统变量的path中添加如下路径

C:\Dev\vcpkg\installed\x64-windows\tools\drogon
C:\Dev\vcpkg\installed\x64-windows\bin
C:\Dev\vcpkg\installed\x64-windows\lib
C:\Dev\vcpkg\installed\x64-windows\include

6.重启powershell,输入drogon_ctl。出现下面这样就说明安装好了

usage: drogon_ctl [-v | --version] [-h | --help] <command> [<args>]
commands list:
create                  create some source files(Use 'drogon_ctl help create' for more information)
help                    display this message
press                   Do stress testing(Use 'drogon_ctl help press' for more information)
version                 display version of this tool

7.切换到你想要的路径下面,参照官方文档使用drogon_ctl创建一个工程。

drogon_ctl create project your_project_name

然后,使用cmake编译

cd build
cmake ..

最后,打开build中的sln工程

8.把drogon_project设为启动项,右键drogon_project-属性-C/C++ -代码生成-运行库。切换成多线程DLL/md。这样工程就创建好了。

2.Drogon的使用

1.创建http控制器

Drogon有HttpSimpleController、HttpController、WebSocketController。最常用的是HttpController,下面尝试进行分析。首先运行下面的代码

drogon_ctl create controller TestController

创建完了之后可以发现controllers文件夹中有TestController.h和TestController.cc。

然后对将两个文件分别进行修改。

.h的代码如下

#ifndef BIANYUANCONTROLLER_H
#define BIANYUANCONTROLLER_H

#include <drogon/HttpController.h>

using namespace drogon;

class BianyuanController : public drogon::HttpController<BianyuanController>
{
public:
	METHOD_LIST_BEGIN
		// 绑定路由到处理函数
		ADD_METHOD_TO(BianyuanController::handleRequest, "/bianyuan", Get);
	METHOD_LIST_END

		// 处理请求的函数声明
		void handleRequest(const HttpRequestPtr& req, std::function<void(const HttpResponsePtr&)>&& callback);

private:
	// 自定义函数声明
	std::string customFunction();
};

#endif // BIANYUANCONTROLLER_H

.cc的代码如下

#include "conf1.h"

void BianyuanController::handleRequest(const HttpRequestPtr& req, std::function<void(const HttpResponsePtr&)>&& callback)
{
	// 调用自定义函数
	std::string result = customFunction();

	// 创建HTTP响应并发送回客户端
	auto resp = HttpResponse::newHttpResponse();
	resp->setContentTypeCode(drogon::CT_TEXT_PLAIN);
	resp->setBody(result);
	callback(resp);
}

std::string BianyuanController::customFunction()
{
	// 你的自定义函数逻辑
	return "Hello from /bianyuan!";
}
ADD_METHOD_TO(BianyuanController::handleRequest, "/bianyuan", Get);

这句话是绑定的核心。首先创建了一个BianyuanController类,然后将处理函数handleRequest和“/bianyuan”路由进行了绑定!在处理函数中,定义了一个结果result,并将这个结果进行callback。这个结果是由自定义函数(边缘检测)得到的。

这样就实现了了:访问“localhost/bianyuan”,然后调用自定义函数再回传。

2.观察http控制器

观察控制器的绑定,得到两个想法:

(1)控制器的绑定是在一个自定义类下完成的,这样就可以实现面向对象设计,如果这个类负责边缘检测,那么所有边缘检测的相关路径和相关函数都在这个类下进行绑定,就完成了和主函数的解耦!

(2)路径的唯一性。由于路径是分别在不同的类下面进行绑定,如果路径相同会怎么样?比如类A绑定了(/test),类B也绑定了(/test)。下面进行测试 

理论上应该得到报错的结果,但是我得到的结果是

如果我注释掉A中的绑定,就变为了

说明Drogon面对路径冲突时,不一定会报错,有可能产生一个覆盖的结果,即对不同类中的同一个路径,只会选择一个方法进行绑定!所以我们在使用的时候要注意路径的唯一性,不然可能会出现绑定被覆盖的情况!

3.创建websocket控制器

【TODO】

4.中间件和过滤器

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值