libhv HttpServer 路由函数定义

https://hewei.blog.csdn.net/article/details/113982999

学习这个libhv 的服务端的写法,demo中采用lamda表达式 来表示,找到官方的函数定义,从而给出示例

#include // 用于 std::this_thread

#include // 用于 std::chrono

#include "hv/hlog.h"

#include "hv/HttpServer.h"

#include <hv/hlog.h>

using namespace hv;

using json = nlohmann::json;

HttpService *g_router = nullptr;

http_server_t *g_server = nullptr;

// // NOTE: http_sync_handler run on IO thread

// typedef std::function<int(HttpRequest* req, HttpResponse* resp)> http_sync_handler;

// // NOTE: http_async_handler run on hv::async threadpool

// typedef std::function<void(const HttpRequestPtr& req, const HttpResponseWriterPtr& writer)> http_async_handler;

// // NOTE: http_ctx_handler run on IO thread, you can easily post HttpContextPtr to your consumer thread for processing.

// typedef std::function<int(const HttpContextPtr& ctx)> http_ctx_handler;

// // NOTE: http_state_handler run on IO thread

// typedef std::function<int(const HttpContextPtr& ctx, http_parser_state state, const char* data, size_t size)> http_state_handler;

// struct http_handler {

// http_sync_handler sync_handler;

// http_async_handler async_handler;

// http_ctx_handler ctx_handler;

// http_state_handler state_handler;

int handleDemo0(const HttpContextPtr& ctx ) {

std::string sret = R"("{"code":0,"data":"demo0"})";

return ctx->send(sret, ctx->type());

}

int handleDemo1(HttpRequest* req, HttpResponse* resp) {

复制代码
resp->headers["Content-Type"] = "application/json; charset=utf-8";

// 设置响应体内容
resp->body =  R"("{"code":0,"data":"demo1"})";

 return 200;

}

void handleDemo2(const HttpRequestPtr& req, const HttpResponseWriterPtr& writer) {

复制代码
 writer->Begin();
       writer->WriteStatus(HTTP_STATUS_OK);
       writer->WriteHeader("Content-Type", req->GetHeader("Content-Type"));

       std::string sret = R"("{"code":0,"data":"demo2"})";

       writer->WriteBody(sret);
       writer->End();
 return ;

}

复制代码
 hlogi("httpport start [%d]", httpport);
g_router = new HttpService();
g_router->POST("/api/demo0", http_ctx_handler(handleDemo0));
g_router->POST("/api/demo1", http_sync_handler(handleDemo1));
    g_router->POST("/api/demo2", http_async_handler(handleDemo2));

g_router->POST("/api/demo3", [](const HttpContextPtr &ctx)
{
    std::string sret =   R"("{"code":0,"data":"demo3"})";

    return ctx->send(sret, ctx->type());
});




g_server = new http_server_t();
g_server->port = httpport;
g_server->service = g_router;
http_server_run(g_server, 0); // 内部会另起线程运行,不会阻塞当前线程
相关推荐
fengbingchun7 个月前
线性规划饮食问题求解:FastAPI作为服务端+libhv作为客户端实现
fastapi·libhv·pyomo
CAir21 年前
HTTP SSE 实现
http·libhv·sse
CAir22 年前
libhv之hio_t分析
libhv·源码分析·hio_t
CAir22 年前
libhv之hloop源码分析
c++·libhv·hloop