当前位置: 首页 > article >正文

C++基于Crow的Web服务开发

一、背景与选型

因项目需要,研究了一下基于C++开发Web服务。

先是问AI基于C++的支持RESTful的Web服务框架,推荐了好几个。

先是尝试Drogon,没成功。朋友推荐Crow,研究了好几个小时,又是查官方文档,又是cmake,又是vcpkg,昨晚上到十二点也没搞定。

睡了一觉今早继续研究,终于成功了,下面记录一下过程。

二、框架版本

1、Crow

版本:1.1.0

下载地址:https://github.com/CrowCpp/Crow/tree/v1.1.0

官网地址:https://crowcpp.org/

2、Asio

版本号:1.30.2(我用的这个版本)

下载地址:https://github.com/chriskohlhoff/asio/tree/asio-1-30-2

官网地址:https://think-async.com/Asio

三、使用VS2017创建基于Crow的控制台工程

1、创建选择控制台工程

点击确定即把控制台工程创建完成了。

2、复制相关头文件

将Crow-1.1.0中的include复制到工程目录下,与CrowDemo.sln同级即可。

将asio-1.30.2中的include文件夹复制到工程目录下,与CrowDemo.sln同级即可。

这样include目录下的内容如下:

注:只保留头文件即可,这里只是为了简化教程。

3、工程设置

打开工程属性,“C/C++”->“常规”->“附加包含目录”

点击编辑,按下图填写:

四、编写代码

CrowDemo.cpp的代码修改如下:

#include "crow.h"

int main(int argc, char *argv[])
{
	crow::SimpleApp app;

	CROW_ROUTE(app, "/")
		([]() {
		return "<h1>Hello, world!</h1>";
	});

	app.port(18080).run();

    return 0;
}

运行即可,如下:

五、测试

浏览器地址栏输入“http://localhost:18080”,运行效果如下图:

六,进阶

1、使用crow_all.h

进入Crow的源码目录下“scripts”文件夹内,命令行运行如下命令(Windows系统)

python3 merge_all.py ../include crow_all.h

即在当前目录下生成头文件“crow_all.h”

CrowDemo工程的include目录下,将文件crow.h和文件夹crow删除,将crow_all.h复制进来,CrowDemo.cpp中的头文件引用改为crow_all.h,如下:

#include "crow_all.h"

int main(int argc, char *argv[])
{
	crow::SimpleApp app;

	CROW_ROUTE(app, "/")
		([]() {
		return "<h1>Hello, world!</h1>";
	});

	app.port(18080).run();

	return 0;
}

2、基于VS2017的Qt控制台工程

创建Qt的控制台工程不再赘述,main.cpp中的代码如下:

#include "crow_all.h"
#include <QtCore/QCoreApplication>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

	crow::SimpleApp app;

	CROW_ROUTE(app, "/")
		([]() {
		return "<h1>Hello, world!</h1>";
	});

	app.port(18080).run();

    return a.exec();
}

3、使用Crow-1.2.1版本

须将工程属性中的C++标准改为C++17,如下图:

七、参考资料

https://crowcpp.org/master/getting_started/setup/windows


http://www.kler.cn/a/578983.html

相关文章:

  • Magento2根据图片文件包导入产品图片
  • 波士顿动力ATLAS 3.0展示6项新AI升级(SPACEO机器人)
  • Qt开发⑫Qt界面优化之CSS_选择器_控件样式
  • k倍区间 | 哈希 分巧克力 | 二分 青蛙跳杯子 | BFS
  • React基础之useInperativehandlle
  • Docker基础之基础概念
  • 【Git】合并冲突
  • python中采用opencv作常规的图片处理的方法~~~
  • QT JSON数据格式
  • unity console日志双击响应事件扩展
  • SQL 简介
  • 【基础5】归并排序
  • SQL SELECT DISTINCT 语句
  • Python3 与 VSCode:深度对比分析
  • 【Git】linux搭建Gitea配置mysql数据库
  • android edittext 防止输入多个小数点或负号
  • 【Elasticsearch入门到落地】9、hotel数据结构分析
  • LeetCode 2523. Closest Prime Numbers in Range(2025/3/7每日一题)
  • 中小企业Windows双因素认证的“轻量化”安全解决方案
  • 探索数据仓库自动化:ETL流程设计与实践