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

所以呢
 所以呢
发布于 2018年08月09日
收藏 5

mongols-0.9.3 发布。

主要更新:

  • 统一tcp和websocket服务器编程接口

  • 统一tcp server和tcp multi-threading server 行为,允许tcp server 转发消息

  • 允许websocket server以单线程模式运行,默认多线程模式

主要特性:

  • tcp sever (epoll)

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

  • http server (epoll)

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

  • websocket server (epoll or epoll+multi-threading)

  • utils

例子:

#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,5000,1024,0);

	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 & 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;
				};
	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);
}
*/

 

http server 压力测试:

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]
本文标题:mongols-0.9.3 发布,C++ 服务器基础设施
加载中

最新评论(22

jason-he
jason-he
支持一下.
补充一点,对于gitee上的项目,我认为如果要提意见,那么就去提issue.
不要在评论区里刷.
所以呢
所以呢

引用来自“飞鸿眉敛”的评论

看起来像是一个学习项目,举个例子,send_to_all_client函数内,非阻塞socket没提供buffer却直接send,也不检查返回值,遍历所有socket直接mutex全部。这些操作都显得很不成熟

引用来自“所以呢”的评论

阁下多虑了。

引用来自“飞鸿眉敛”的评论

具体多虑在什么地方?如果我send的时候,socket底层的写缓存已满,是不是你的send数据被丢掉了?

引用来自“所以呢”的评论

说阁下多虑了还不信。没办法。如果用mongols发生阁下预料的事情,请到github反馈。谢谢。

引用来自“飞鸿眉敛”的评论

这还如果发生,我的天,有时间多刷几遍unp吧,我本来是不想打击你的,任何一个合格的服务端程序员都该对发送\接收\断开有相当的敬畏,就算不是一个服务端程序员,仅仅只是一个合格的程序员,看到send的api有返回值也该问这个返回值是干什么的,可惜你不是,打搅了

引用来自“所以呢”的评论

unp,hehe

引用来自“飞鸿眉敛”的评论

少装逼了,这么简单的东西都不知道,敢反驳一句不,hehe,你还有资格hehe

引用来自“所以呢”的评论

敢反驳一句不!幼稚。

引用来自“飞鸿眉敛”的评论

提的问题你哪一点敢回答了?装智障是不是装的很开心?还是本来就是个智障?

引用来自“所以呢”的评论

小人难养也

引用来自“飞鸿眉敛”的评论

别装逼了,滚吧,连send返回值都不知道检查的玩意
mongols杂种
飞鸿眉敛
飞鸿眉敛

引用来自“飞鸿眉敛”的评论

看起来像是一个学习项目,举个例子,send_to_all_client函数内,非阻塞socket没提供buffer却直接send,也不检查返回值,遍历所有socket直接mutex全部。这些操作都显得很不成熟

引用来自“所以呢”的评论

阁下多虑了。

引用来自“飞鸿眉敛”的评论

具体多虑在什么地方?如果我send的时候,socket底层的写缓存已满,是不是你的send数据被丢掉了?

引用来自“所以呢”的评论

说阁下多虑了还不信。没办法。如果用mongols发生阁下预料的事情,请到github反馈。谢谢。

引用来自“飞鸿眉敛”的评论

这还如果发生,我的天,有时间多刷几遍unp吧,我本来是不想打击你的,任何一个合格的服务端程序员都该对发送\接收\断开有相当的敬畏,就算不是一个服务端程序员,仅仅只是一个合格的程序员,看到send的api有返回值也该问这个返回值是干什么的,可惜你不是,打搅了

引用来自“所以呢”的评论

unp,hehe

引用来自“飞鸿眉敛”的评论

少装逼了,这么简单的东西都不知道,敢反驳一句不,hehe,你还有资格hehe

引用来自“所以呢”的评论

敢反驳一句不!幼稚。

引用来自“飞鸿眉敛”的评论

提的问题你哪一点敢回答了?装智障是不是装的很开心?还是本来就是个智障?

引用来自“所以呢”的评论

小人难养也
别装逼了,滚吧,连send返回值都不知道检查的玩意
所以呢
所以呢

引用来自“飞鸿眉敛”的评论

看起来像是一个学习项目,举个例子,send_to_all_client函数内,非阻塞socket没提供buffer却直接send,也不检查返回值,遍历所有socket直接mutex全部。这些操作都显得很不成熟

引用来自“所以呢”的评论

阁下多虑了。

引用来自“飞鸿眉敛”的评论

具体多虑在什么地方?如果我send的时候,socket底层的写缓存已满,是不是你的send数据被丢掉了?

引用来自“所以呢”的评论

说阁下多虑了还不信。没办法。如果用mongols发生阁下预料的事情,请到github反馈。谢谢。

引用来自“飞鸿眉敛”的评论

这还如果发生,我的天,有时间多刷几遍unp吧,我本来是不想打击你的,任何一个合格的服务端程序员都该对发送\接收\断开有相当的敬畏,就算不是一个服务端程序员,仅仅只是一个合格的程序员,看到send的api有返回值也该问这个返回值是干什么的,可惜你不是,打搅了

引用来自“所以呢”的评论

unp,hehe

引用来自“飞鸿眉敛”的评论

少装逼了,这么简单的东西都不知道,敢反驳一句不,hehe,你还有资格hehe

引用来自“所以呢”的评论

敢反驳一句不!幼稚。

引用来自“飞鸿眉敛”的评论

提的问题你哪一点敢回答了?装智障是不是装的很开心?还是本来就是个智障?
小人难养也
飞鸿眉敛
飞鸿眉敛

引用来自“飞鸿眉敛”的评论

看起来像是一个学习项目,举个例子,send_to_all_client函数内,非阻塞socket没提供buffer却直接send,也不检查返回值,遍历所有socket直接mutex全部。这些操作都显得很不成熟

引用来自“所以呢”的评论

阁下多虑了。

引用来自“飞鸿眉敛”的评论

具体多虑在什么地方?如果我send的时候,socket底层的写缓存已满,是不是你的send数据被丢掉了?

引用来自“所以呢”的评论

说阁下多虑了还不信。没办法。如果用mongols发生阁下预料的事情,请到github反馈。谢谢。

引用来自“风云剑客”的评论

看来你对网络编程是一知半解,并不熟悉epoll机制
现在是看了两篇博客的人都敢写库,反正坑人了也不用负责
飞鸿眉敛
飞鸿眉敛

引用来自“飞鸿眉敛”的评论

看起来像是一个学习项目,举个例子,send_to_all_client函数内,非阻塞socket没提供buffer却直接send,也不检查返回值,遍历所有socket直接mutex全部。这些操作都显得很不成熟

引用来自“所以呢”的评论

阁下多虑了。

引用来自“飞鸿眉敛”的评论

具体多虑在什么地方?如果我send的时候,socket底层的写缓存已满,是不是你的send数据被丢掉了?

引用来自“所以呢”的评论

说阁下多虑了还不信。没办法。如果用mongols发生阁下预料的事情,请到github反馈。谢谢。

引用来自“飞鸿眉敛”的评论

这还如果发生,我的天,有时间多刷几遍unp吧,我本来是不想打击你的,任何一个合格的服务端程序员都该对发送\接收\断开有相当的敬畏,就算不是一个服务端程序员,仅仅只是一个合格的程序员,看到send的api有返回值也该问这个返回值是干什么的,可惜你不是,打搅了

引用来自“所以呢”的评论

unp,hehe

引用来自“飞鸿眉敛”的评论

少装逼了,这么简单的东西都不知道,敢反驳一句不,hehe,你还有资格hehe

引用来自“所以呢”的评论

敢反驳一句不!幼稚。
提的问题你哪一点敢回答了?装智障是不是装的很开心?还是本来就是个智障?
飞鸿眉敛
飞鸿眉敛

引用来自“飞鸿眉敛”的评论

@红薯 一点审查机制都没有就推荐到首页的吗?这种连send返回值都不知道检测的人写的库,你也敢推荐?

引用来自“飞鸿眉敛”的评论

if (i.first != fd && h(i.second)) {
send(i.first, str.c_str(), str.size(), 0);
std::this_thread::yield();
}

有这样的服务端代码?

引用来自“所以呢”的评论

还审查机制!!!笑死人了。
你这水平还敢出来装逼才是笑死人,懒得教你
所以呢
所以呢

引用来自“飞鸿眉敛”的评论

看起来像是一个学习项目,举个例子,send_to_all_client函数内,非阻塞socket没提供buffer却直接send,也不检查返回值,遍历所有socket直接mutex全部。这些操作都显得很不成熟

引用来自“所以呢”的评论

阁下多虑了。

引用来自“飞鸿眉敛”的评论

具体多虑在什么地方?如果我send的时候,socket底层的写缓存已满,是不是你的send数据被丢掉了?

引用来自“所以呢”的评论

说阁下多虑了还不信。没办法。如果用mongols发生阁下预料的事情,请到github反馈。谢谢。

引用来自“飞鸿眉敛”的评论

这还如果发生,我的天,有时间多刷几遍unp吧,我本来是不想打击你的,任何一个合格的服务端程序员都该对发送\接收\断开有相当的敬畏,就算不是一个服务端程序员,仅仅只是一个合格的程序员,看到send的api有返回值也该问这个返回值是干什么的,可惜你不是,打搅了

引用来自“所以呢”的评论

unp,hehe

引用来自“飞鸿眉敛”的评论

少装逼了,这么简单的东西都不知道,敢反驳一句不,hehe,你还有资格hehe
敢反驳一句不!幼稚。
所以呢
所以呢

引用来自“飞鸿眉敛”的评论

@红薯 一点审查机制都没有就推荐到首页的吗?这种连send返回值都不知道检测的人写的库,你也敢推荐?

引用来自“飞鸿眉敛”的评论

if (i.first != fd && h(i.second)) {
send(i.first, str.c_str(), str.size(), 0);
std::this_thread::yield();
}

有这样的服务端代码?
还审查机制!!!笑死人了。
飞鸿眉敛
飞鸿眉敛

引用来自“飞鸿眉敛”的评论

@红薯 一点审查机制都没有就推荐到首页的吗?这种连send返回值都不知道检测的人写的库,你也敢推荐?
if (i.first != fd && h(i.second)) {
send(i.first, str.c_str(), str.size(), 0);
std::this_thread::yield();
}

有这样的服务端代码?
返回顶部
顶部