http 服务器

http 服务器建构在tcp 服务器之上。内置完整的form处理,可以自动解析GET和POST表单,支持POST文件上传,并且支持会话管理和缓存机制。开发者完全可以将其视为完整的的支持http/1.1的应用服务器。

来看代码:


#include <mongols/http_server.hpp>

int main(int, char**) {
    auto f = [](const mongols::request&) {
        return true;
    };
    auto g = [](const mongols::request& req, mongols::response & res) {
        res.content = std::move("hello,world");
        res.status = 200;
    };
    int port = 9090;
    const char* host = "127.0.0.1";
    mongols::http_server
    server(host, port, 5000, 8096, 0/*2*/);
    server.set_enable_session(false);
    server.set_enable_cache(false);
    server.run(f, g);
}

http服务器构造时可以通过第五个参数选择是否使用多线程机制,当其为大于0时,其值为工作线程数。

run方法需要两个函数参数,第一个可用来过滤客户端,第二个则用来生成响应。

http_server的并发性能非常好,远高于常见的基于libevent、libev或者libuv的其他http服务器:

ab_http

mongols

使用路由机制

http_server可以像一些web开发框架一样,通过添加路由映射来支持业务逻辑:


    server.add_route({"GET"}, "^/get/([a-zA-Z]+)/?$"
    , [](const mongols::request& req, mongols::response& res, const std::vector<std::string>& param) {
        res.content = req.method + "<br/>" + param[1];
        res.status = 200;
    });

    server.add_route({"POST"}, "^/post/([0-9]+)/?$"
    , [](const mongols::request& req, mongols::response& res, const std::vector<std::string>& param) {
        res.content = req.method + "<br/>" + param[1];
        res.status = 200;
    });
    server.run_with_route(f)

add_route方法第一个参数是业务支持的method列表,第二个参数是uri需匹配的正则模式,第三个参数则是业务逻辑handler。业务handler的第三个参数是通过google RE2库进行计算获得的匹配正则模式的group。通过这种方式,http_server看起来像个灵活的框架。

run_with_route的参数是f用了过滤客户端,与run方法的第一个参数具有相同的含义。

results matching ""

    No results matching ""