From 2b71d6a8d57c773bc7734b253a1ffd1e47162184 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Thu, 14 Oct 2021 19:07:14 +0200 Subject: asio HTTP implementation (#23) asio-based HTTP implementation --- zenhttp/httpserver.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) (limited to 'zenhttp/httpserver.cpp') diff --git a/zenhttp/httpserver.cpp b/zenhttp/httpserver.cpp index 69974ca06..150054c30 100644 --- a/zenhttp/httpserver.cpp +++ b/zenhttp/httpserver.cpp @@ -2,9 +2,9 @@ #include +#include "httpasio.h" #include "httpnull.h" #include "httpsys.h" -#include "httpuws.h" #include #include @@ -565,16 +565,56 @@ HttpRequestRouter::HandleRequest(zen::HttpServerRequest& Request) ////////////////////////////////////////////////////////////////////////// +enum class HttpServerClass +{ + kHttpAsio, + kHttpSys, + kHttpNull +}; + Ref -CreateHttpServer() +CreateHttpServer(std::string_view ServerClass) { -#if 0 - return new HttpUwsServer; + using namespace std::literals; + +#if 1 + HttpServerClass Class = HttpServerClass::kHttpAsio; #elif ZEN_WITH_HTTPSYS - return new HttpSysServer(std::thread::hardware_concurrency(), /* background worker threads */ 16); + HttpServerClass Class = HttpServerClass::kHttpSys; #else - return new HttpNullServer; + HttpServerClass Class = HttpServerClass::kHttpNull; +#endif + + if (ServerClass == "asio"sv) + { + Class = HttpServerClass::kHttpAsio; + } + else if (ServerClass == "httpsys"sv) + { + Class = HttpServerClass::kHttpSys; + } + else if (ServerClass == "null"sv) + { + Class = HttpServerClass::kHttpNull; + } + + switch (Class) + { + default: + case HttpServerClass::kHttpAsio: + ZEN_INFO("using asio HTTP server implementation"); + return new HttpAsioServer(); + +#if ZEN_WITH_HTTPSYS + case HttpServerClass::kHttpSys: + ZEN_INFO("using http.sys server implementation"); + return new HttpSysServer(std::thread::hardware_concurrency(), /* background worker threads */ 16); #endif + + case HttpServerClass::kHttpNull: + ZEN_INFO("using null HTTP server implementation"); + return new HttpNullServer; + } } ////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3