C++ 服务器基础设施 mongols

MIT
C/C++ 查看源码»
Linux
2018-07-23
所以呢
mongols 正在参加 2019 年度最受欢迎开源中国软件评选,请投票支持!
mongols 在 2019 年度最受欢迎开源中国软件评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票赢奖品
已投票

mongols

一个C++库

依赖:

  • linux

  • pcre-devel

  • hiredis-devel

  • zlib-devel

  • openssl-devel

  • curl-devel

sudo yum install pcre-devel zlib-devel openssl-devel hiredis-devel libcurl-devel

或者:

sudo apt-get install libpcre3-dev zlib1g-dev libssl-dev libhiredis-dev libcurl4-openssl-dev

特性:

epoll or epoll + multi-threading

  • tcp sever

  • http server

  • websocket server

  • web server

  • leveldb server

  • lua server

  • sqlite server

  • utils

安装:

make clean && make -j2 && sudo make install && sudo ldconfig

使用:

pkg-config --libs --cflags mongols

例子:

#include<mongols/tcp_server.hpp>#include<mongols/tcp_threading_server.hpp>#include<mongols/http_server.hpp>#include<mongols/ws_server.hpp>#include<mongols/web_server.hpp>#include<mongols/leveldb_server.hpp>#include<mongols/util.hpp>#include/*
//websocket server
int main(int,char**){
int port=9090;
const char* host="127.0.0.1";
mongols::ws_server server(host,port,5000,2048,4);

auto f=[](const std::string& input
            , bool& keepalive
            , bool& send_to_other
            , mongols::tcp_server::client_t& client
            , mongols::tcp_server::filter_handler_function& send_to_other_filter){
keepalive = KEEPALIVE_CONNECTION;
send_to_other=true;
if(input=="close"){
keepalive = CLOSE_CONNECTION;
send_to_other = false;
}
};
server.run(f);
//server.run();
}
*/


/*
//tcp server or tcp multi-threading server
int main(int,char**)
{
auto f=[](const std::string& input
 , bool & keepalive
                , bool& send_to_other
                , mongols::tcp_server::client_t& client
                , mongols::tcp_server::filter_handler_function& send_to_other_filter){
keepalive= KEEPALIVE_CONNECTION;
send_to_other=true;
return input;
};
int port=9090;
const char* host="127.0.0.1";

//mongols::tcp_threading_server
mongols::tcp_server

server(host,port);
server.run(f);

}
*/




//http server or multi-threading server
int main(int,char**)
{
auto f=[](const mongols::request&){
return true;
};
auto g=[](const mongols::request& req,mongols::response& res){
//std::unordered_map::const_iterator i;
//if((i=req.session.find("test"))!=req.session.end()){
//long test=std::stol(i->second)+1;
//res.content=std::to_string(test);
//res.session["test"]=res.content;
//}else{
//res.content=std::to_string(0);;
//res.session["test"]=res.content;
//}
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,1024,4);
server(host,port);
server.set_enable_session(false);
server.set_enable_cache(false);
server.run(f,g);
}

/*
//web server or multi-threading server
int main(int,char**)
{
auto f=[](const mongols::request&){
if(req.method=="GET"&&req.uri.find("..")==std::string::npos){
return true;
}
return false;
};
int port=9090;
const char* host="127.0.0.1";
mongols::web_server 
//server(host,port,5000,1024,4);
server(host,port);
server.set_root_path("html");
server.set_mime_type_file("mime.conf");
server.set_list_directory(true);
server.run(f);
}
*/

/*
//leveldb_server or multi-threading server
int main(int,char**){
int port=9090;
const char* host="127.0.0.1";
mongols::leveldb_server 
//server(host,port,5000,1024,4);
server(host,port);
server.run("html/leveldb");
}
*/

压力测试:

[centos@localhost demo]$ uname -a
Linux localhost 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[centos@localhost demo]$ cat /proc/cpuinfo| grep "processor"| wc -l
4
[centos@localhost demo]$ cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores: 2
[centos@localhost demo]$ cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
1

ab -c1000 -n100000 http://127.0.0.1:9090/

Server Software:        mongols/0.9.0
Server Hostname:        127.0.0.1
Server Port:            9090

Document Path:          /
Document Length:        13 bytes

Concurrency Level:      1000
Time taken for tests:   8.180 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      13300000 bytes
HTML transferred:       1300000 bytes
Requests per second:    12225.00 [#/sec] (mean)
Time per request:       81.800 [ms] (mean)
Time per request:       0.082 [ms] (mean, across all concurrent requests)
Transfer rate:          1587.82 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   66 263.3      7    3020
Processing:     2   11  11.9      9     831
Waiting:        0    8  11.5      7     829
Total:          6   77 265.8     16    3033

Percentage of the requests served within a certain time (ms)
  50%     16
  66%     20
  75%     22
  80%     23
  90%     29
  95%   1017
  98%   1025
  99%   1030
 100%   3033 (longest request)

ab -kc1000 -n100000 -H'Connection: keep-alive' http://127.0.0.1:9090/

Server Software:        mongols/0.9.0
Server Hostname:        127.0.0.1
Server Port:            9090

Document Path:          /
Document Length:        13 bytes

Concurrency Level:      1000
Time taken for tests:   1.935 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    100000
Total transferred:      13800000 bytes
HTML transferred:       1300000 bytes
Requests per second:    51671.74 [#/sec] (mean)
Time per request:       19.353 [ms] (mean)
Time per request:       0.019 [ms] (mean, across all concurrent requests)
Transfer rate:          6963.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   3.2      0      48
Processing:     8   19   1.4     18      48
Waiting:        0   19   1.4     18      25
Total:          8   19   3.1     18      64

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     19
  90%     20
  95%     21
  98%     23
  99%     28
 100%     64 (longest request)
的码云指数为
超过 的项目
加载中

评论(2)

zhenruyan
zhenruyan
大佬贼6
无聊的人啊
无聊的人啊
Gpl授权没人敢用

C++网络库 mongols-1.5.2 发布,添加 JS 服务器

高性能c++网络库mongols-1.5.2已经发布. 主要更新: 更新web_server,修复一个文件读取优化Bug 更新tcp_server,修改默认信号处理集,添加backlog 配置接口 为多个基于http_server的server添加...

2018/12/17 07:40

mongols-1.4.5 发布,C++ 服务器基础设施

mongols-1.4.5发布: 更新依赖组件 更新web_server,提升速度 更新lua_server,支持单文件入口模式 更新example 简介: mongols是C++ 服务器基础设施库, 它的主要特性如下: tcp 服务器 http...

2018/12/04 08:28

mongols-1.4.2 发布,C++ 高性能网络库

c++高性能网络库mongols-1.4.2发布。 主要更新: 升级http_server,lua_server和leveldb,新增LRU缓存机制 升级medis_server,新增时间过期机制,以及若干函数 升级msgpack组件 主要特性: 快 ...

2018/11/22 08:27

mongols-1.3.3 发布,高性能网络库

c++ 高性能网络库 mongols-1.3.3已经发布。 主要更新: 升级websocket服务器 升级tcp 服务器 升级web服务器 更新使用文档 更新example 更好的多进程化支持 简介: mongols是C++ 服务器基础设施...

2018/11/01 07:06

mongols-1.2.5 发布,支持多进程化,性能再获提升

高性能c++网络库mongols-1.2.5已经发布了。 主要更新: 升级线程池 升级http服务器 升级tcp服务器和tcp 多线程服务器 所有服务器支持多进程化 更新文档和例子 简介: mongols是C++ 服务器基础...

2018/10/22 07:22

mongols-1.2.0 发布,为 NOSQL 添加 lua 支持指令

c++ 网络库mongols-1.2.0已经发布。 主要更新: 为nosql服务器medis_server添加lua脚本支持指令 优化线程池 优化tcp_threading_server 优化信号处理 例子: 可以用redis-cli与medis_server进行...

2018/10/03 07:10

mongols-1.1.5 发布,新增混合型 NOSQL:medis

mongols-1.1.5已经发布。主要更新: 新增混合型NOSQL:medis_server 升级http and leveldb server medis_server 是一个使用RESP协议进行交互的混合型缓存服务器。 它像redis一样,提供多种复杂...

2018/09/27 07:44

mongols-1.0.9发布,c++服务器基础设施

mongols-1.0.9已经发布。 主要更新: 更新文件上传机制,for http_server 作为leveldb作为nosql,替换redis,for http_server 提升多线程机制效能,for tcp_server 添加lua_server 添加sqlit...

2018/09/04 08:09

mongols-1.0.0 发布,C++ 服务器基础设施

mongols更新至1.0.0。 主要更新: 更新 ws_server,添加客户端信息及gid控制 更新 http_request_parser,bug修复 添加 web_server 添加 levedb_server 简介: mongols是一个C++网络库,主要特...

2018/08/27 07:50

mongols-0.9.3 发布,C++ 服务器基础设施

mongols-0.9.3 发布。 主要更新: 统一tcp和websocket服务器编程接口 统一tcp server和tcp multi-threading server 行为,允许tcp server 转发消息 允许websocket server以单线程模式运行,默...

2018/08/09 09:07

没有更多内容

加载失败,请刷新页面

暂无问答

Getting around to all these a

Getting around to all these a

2015/05/06 11:45
13
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部