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

栏目: 软件资讯 · 发布时间: 7年前

内容简介:mongols-0.9.2已经发布。 主要更新: 添加zstd库 为http server优化会话和缓存管理 介绍: mongols是一个主要针对c++服务器端开发的基础设施库。主要特性如下: tcp sever (epoll) tcp multi-threading server (...

mongols-0.9.2已经发布。

主要更新

  • 添加zstd库

  • 为http server优化会话和缓存管理

介绍:

mongols是一个主要针对c++服务器端开发的基础设施库。主要特性如下:

  • tcp sever (epoll)

  • tcp multi-threading server (epoll+multi-threading)

  • http server (epoll)

  • http multi-threading server (epoll+multi-threading)

  • websocket server (epoll+multi-threading)

  • utils

依赖:

  • linux

  • gcc(c11),g++(c++11)

  • pcre-devel

  • zlib-devel

  • openssl-devel

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

或者:

sudo apt-get install libpcre3-dev zlib1g-dev libssl-dev

安装:

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/util.hpp>
#include <iostream>

/*
//websocket server
int main(int,char**){
	int port=9090;
	const char* host="127.0.0.1";
	mongols::ws_server server(host,port);

	auto f=[](const std::string& input
            , bool& keepalive
            , bool& send_to_other
            , std::pair<size_t, size_t>& g_u_id
            , mongols::tcp_server::filter_handler_function& send_to_other_filter){
			keepalive = KEEPALIVE_CONNECTION;
			send_to_other=true;
			return input;
	};
	server.run(f);
	server.run();
}
*/


/*
//tcp server or tcp multi-threading server
int main(int,char**)
{
	auto f=[](const std::string& input
                , bool& send_to_other
                , std::pair<size_t, size_t>& g_u_id
                , mongols::tcp_server::filter_handler_function& send_to_other_filter){
					send_to_other=true;
					return std::make_pair(input,KEEPALIVE_CONNECTION);
				};
	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<std::string, std::string>::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);
}

压力测试:

2核4G,centos7

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

RPS: 10000+

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

RPS: 50000+

在ubuntu 18.04上RPS更高,keep-alive,高达80000-120000。


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人都是产品经理

人人都是产品经理

苏杰 / 电子工业出版社 / 2014-9-1 / CNY 55.00

《人人都是产品经理(纪念版)》为经典畅销书《人人都是产品经理》的内容升级版本。对于大量成长起来的优秀互联网产品经理,为数不少想投身产品工作的其他岗位从业者,以及更多有志从事这一职业的学生而言,这本书曾是他们记忆深刻的启蒙读物、思想基石和行动手册。作者以分享经历与体会为出发点,以“朋友间聊聊如何做产品”的语气,将自己数年产品工作过程中学到的思维方法与做事方式,及其它们对自己的帮助,系统性地梳理为用户......一起来看看 《人人都是产品经理》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具