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