1、wfest 简单介绍
wfrest 主要是用于搭建http 服务器的,http 服务器以前常用的有 轻量级的mongoose、cpp-http 两个库,还是比较方便使用的,都可以扮演者服务器和客户端的角色且都是只有2个文件就可以轻松的搭建起web 服务器,以前公司项目中这2个比较常用到。今天主要向你介绍另外一个web 服务器 wfrest。wfrest: C++ Web Framework REST API (gitee.com) 这是gitee源码链接,欢迎下载使用,从中你可以学习到使用,也可以阅读源码,增强自身水平。你会发现wfest 和cpp-http 在使用结构上基本一致。
二者在使用结构上非常的相似,理解起来比较好理解,这就是一个优秀的接口设计。
2、wfrest 的使用
01_basic 教你的是如何去搭建一个http 服务器,代码如下,从这里面我们可以知道,搭建一个服务器的步骤,有以下几个注意事项。
1、signal信号
signal(registered signal, signal handler) 函数 主要是起信号屏蔽,我们常见的主要信号如下列表
2、lamada 表达式
lamada 表达式是一个比较优秀的写法,本体就是一个函数指针、类似于我们常见的std::bind 和 std::function的用途,在这里面是非常经常用到的。
[] (){}: [] 表示的是参数列表 () 表示的是传递参数 {} 表示的函数体执行过程。
3、track 追踪
在下面代码里面有一个 svr.track() 的用法,track 如同日志一般,可以打印函数的执行过程中的信息,在《[提高C++性能的编程技术].左飞.扫描版》pdf 中的第一节就可以看到该介绍
在本代码中是这样体现的,就是打印出运行的状态。
#include "workflow/WFFacilities.h"
#include <csignal>
#include "wfrest/HttpServer.h"
using namespace wfrest;
static WFFacilities::WaitGroup wait_group(1);
void sig_handler(int signo)
{
wait_group.done();
}
int main()
{
signal(SIGINT, sig_handler);
HttpServer svr;
// curl -v http://ip:port/hello
svr.GET("/hello", [](const HttpReq *req, HttpResp *resp)
{
resp->String("world\n");
});
// curl -v http://ip:port/data
svr.GET("/data", [](const HttpReq *req, HttpResp *resp)
{
std::string str = "Hello world";
resp->String(std::move(str));
});
svr.ROUTE("/multi", [](const HttpReq *req, HttpResp *resp)
{
std::string method(req->get_method());
resp->String(std::move(method));
}, {"GET", "POST"});
// curl -v http://ip:port/post -d 'post hello world'
svr.POST("/post", [](const HttpReq *req, HttpResp *resp)
{
// reference, no copy here
std::string& body = req->body();
fprintf(stderr, "post data : %s\n", body.c_str());
});
if (svr.track().start(8888) == 0)
{
svr.list_routes();
wait_group.wait();
svr.stop();
} else
{
fprintf(stderr, "Cannot start server");
exit(1);
}
return 0;
}
好了,关于wfrest的介绍就简单的介绍到这里,后面的会更加精彩,如果有问题,欢迎指出。