C++异步网络库workflow及基于workflow实现的网络框架wfrest的安装使用心得

最近在划水时接触到一个非常强大的开源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;
}
原文地址:https://www.cnblogs.com/xusirui/p/15798663.html