mogols 是一个C++库。
依赖:liux
pcre-devel
hiredis-devel
zlib-devel
opessl-devel
curl-devel
sudo yum istall pcre-devel zlib-devel opessl-devel hiredis-devel libcurl-devel或者:
sudo apt-get istall libpcre3-dev zlib1g-dev libssl-dev libhiredis-dev libcurl4-opessl-dev特性:epollorepoll+multi-threadig
tcpsever
httpserver
websocketserver
webserver
leveldbserver
luaserver
sqliteserver
utils
安装:makeclea&&make-j2&&sudomakeistall&&sudoldcofig
使用:pkg-cofig--libs--cflagsmogols
例子:#iclude<mogols/tcp_server.hpp>#iclude<mogols/tcp_threadig_server.hpp>#iclude<mogols/http_server.hpp>#iclude<mogols/ws_server.hpp>#iclude<mogols/web_server.hpp>#iclude<mogols/leveldb_server.hpp>#iclude<mogols/util.hpp>#iclude/*//websocket serverit mai(it,char**){it port=9090;cost char* host="127.0.0.1";mogols::ws_server server(host,port,5000,2048,4);auto f=[](cost std::strig& iput , bool& keepalive , bool& sed_to_other , mogols::tcp_server::cliet_t& cliet , mogols::tcp_server::filter_hadler_fuctio& sed_to_other_filter){keepalive = KEEPALIVE_CONNECTION;sed_to_other=true;if(iput=="close"){keepalive = CLOSE_CONNECTION;sed_to_other = false;}};server.ru(f);//server.ru();}*//*//tcp server or tcp multi-threadig serverit mai(it,char**){auto f=[](cost std::strig& iput , bool & keepalive , bool& sed_to_other , mogols::tcp_server::cliet_t& cliet , mogols::tcp_server::filter_hadler_fuctio& sed_to_other_filter){keepalive= KEEPALIVE_CONNECTION;sed_to_other=true;retur iput;};it port=9090;cost char* host="127.0.0.1";//mogols::tcp_threadig_servermogols::tcp_serverserver(host,port);server.ru(f);}*///http server or multi-threadig serverit mai(it,char**){auto f=[](cost mogols::request&){retur true;};auto g=[](cost mogols::request& req,mogols::respose& res){//std::uordered_map::cost_iterator i;//if((i=req.sessio.fid("test"))!=req.sessio.ed()){//log test=std::stol(i->secod)+1;//res.cotet=std::to_strig(test);//res.sessio["test"]=res.cotet;//}else{//res.cotet=std::to_strig(0);;//res.sessio["test"]=res.cotet;//}res.cotet=std::move("hello,world");res.status=200;};it port=9090;cost char* host="127.0.0.1";mogols::http_server //server(host,port,5000,1024,4);server(host,port);server.set_eable_sessio(false);server.set_eable_cache(false);server.ru(f,g);}/*//web server or multi-threadig serverit mai(it,char**){auto f=[](cost mogols::request&){if(req.method=="GET"&&req.uri.fid("..")==std::strig::pos){retur true;}retur false;};it port=9090;cost char* host="127.0.0.1";mogols::web_server //server(host,port,5000,1024,4);server(host,port);server.set_root_path("html");server.set_mime_type_file("mime.cof");server.set_list_directory(true);server.ru(f);}*//*//leveldb_server or multi-threadig serverit mai(it,char**){it port=9090;cost char* host="127.0.0.1";mogols::leveldb_server //server(host,port,5000,1024,4);server(host,port);server.ru("html/leveldb");}*/压力测试:
[cetos@localhost demo]$ uame -aLiux localhost 3.10.0-862.9.1.el7.x86_64 #1 SMP Mo Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Liux[cetos@localhost demo]$ cat /proc/cpuifo| grep "processor"| wc -l4[cetos@localhost demo]$ cat /proc/cpuifo| grep "cpu cores"| uiqcpu cores: 2[cetos@localhost demo]$ cat /proc/cpuifo| grep "physical id"| sort| uiq| wc -l1ab-c1000-100000https://127.0.0.1:9090/Server Software: mogols/0.9.0Server Hostame: 127.0.0.1Server Port: 9090Documet Path: /Documet Legth: 13 bytesCocurrecy Level: 1000Time take for tests: 8.180 secodsComplete requests: 100000Failed requests: 0Write errors: 0Keep-Alive requests: 0Total trasferred: 13300000 bytesHTML trasferred: 1300000 bytesRequests per secod: 12225.00 [#/sec] (mea)Time per request: 81.800 [ms] (mea)Time per request: 0.082 [ms] (mea, across all cocurret requests)Trasfer rate: 1587.82 [Kbytes/sec] receivedCoectio Times (ms) mi mea[+/-sd] media maxCoect: 0 66 263.3 7 3020Processig: 2 11 11.9 9 831Waitig: 0 8 11.5 7 829Total: 6 77 265.8 16 3033Percetage of the requests served withi a certai time (ms) 50% 16 66% 20 75% 22 80% 23 90% 29 95% 1017 98% 1025 99% 1030 100% 3033 (logest request)ab-kc1000-100000-H'Coectio:keep-alive'https://127.0.0.1:9090/Server Software: mogols/0.9.0Server Hostame: 127.0.0.1Server Port: 9090Documet Path: /Documet Legth: 13 bytesCocurrecy Level: 1000Time take for tests: 1.935 secodsComplete requests: 100000Failed requests: 0Write errors: 0Keep-Alive requests: 100000Total trasferred: 13800000 bytesHTML trasferred: 1300000 bytesRequests per secod: 51671.74 [#/sec] (mea)Time per request: 19.353 [ms] (mea)Time per request: 0.019 [ms] (mea, across all cocurret requests)Trasfer rate: 6963.57 [Kbytes/sec] receivedCoectio Times (ms) mi mea[+/-sd] media maxCoect: 0 0 3.2 0 48Processig: 8 19 1.4 18 48Waitig: 0 19 1.4 18 25Total: 8 19 3.1 18 64Percetage of the requests served withi a certai time (ms) 50% 18 66% 19 75% 19 80% 19 90% 20 95% 21 98% 23 99% 28 100% 64 (logest request)
评论