最近在划水时接触到一个非常强大的开源C++异步网络库workflow以及其一种实现框架wfrest
原帖链接:
workflow: https://www.zhihu.com/question/41609070/answer/2073049547
wfrest: https://www.zhihu.com/people/liyingxin1412
作者工作时主要使用的java语言,然而也偶尔需要用到c++,也是第一次接触到c++的网络服务器,这也可以作为一种C++/Java之间的RPC通信方式,因此进行了简单了解。
安装
安装环境:ubuntu20.04
首先需要前往Git下载workflow与wfrest
workflow: https://github.com/sogou/workflow
wfrest: https://github.com/wfrest/wfrest
使用Git clone命令下载到本地,按照项目中的readme文档install项目
安装成功后,可以在/usr/local文件夹中看到libwfrest.a libworkflow.a libworkflow.so 其中.a .so分别为静态库与动态库文件(有其中的一个就可以使用,只是二者有区别,会影响项目文件的大小)
使用
创建一个新的C++项目
在CMakeList文件中链接库wfrest workflow ssl crypto pthread z
target_link_libraries(webserver wfrest workflow ssl crypto pthread z)
如果不使用cmake工具,则需要在编译时手动链接这些库
编译成功后,即可启动一个服务,附作者的demo
#include "wfrest/HttpServer.h"
using namespace wfrest;
int main()
{
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));
});
// 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.start(8888) == 0)
{
getchar();
svr.stop();
} else
{
fprintf(stderr, "Cannot start server");
exit(1);
}
return 0;
}