Skip to content

An Object-oriented Lightweight High Performance C++ Network Library For Linux System

License

Notifications You must be signed in to change notification settings

YukangLiu/kikilib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kikilib网络库

blog:http://www.liuyukang.com/archives/kikilibdoc

版本说明

1、定位:
kikilib网络库是轻量,高性能,纯c++11,更符合OOP语言特点且易用的一个Linux服务器网络库,它没有繁琐的回调函数设置和上下文指针机制,这让它的使用和对象的生命期管理都变得更加简单。


2、概述:
使用了多Reactor+非阻塞IO的并发模型,坚持One Loop Per Thread,默认根据负载情况派发新连接。
1、实现了双缓存队列的高性能线程池工具。
2、实现了RingBuffer无锁队列的高性能异步日志工具。
3、实现了定时器事件。
4、实现了事件按优先级处理。


3、文件:
kikilib:网络库的源代码。
old_version:旧版本源码。
example:一些示例,包含:
echo: 回显服务器。
http:使用kikilib网络库实现的一个简单的静态网页服务器。
chatroom:使用kikilib网络库实现的一个简单的聊天室服务器(可以认为是广播协议)。
test:测试工程,加上http和chatroom将所有函数都使用上了。


4、类图:
用户继承EventService类实现其中的UsrImplEventService即可。

uml

5、编译:
kikilib:make即可,会生成libkikilib.so。
echo:make了kikilib之后进入该文件夹make即可。
http:make了kikilib之后进入该文件夹make即可。
chatroom:make了kikilib之后进入该文件夹make即可。
test:make了kikilib之后进入该文件夹make即可。


6、http及chatroom使用:
http:编译后运行即可。测试站点:www.liuyukang.com
chatroom:编译后,修改config.txt中的端口号为监听的端口号,运行即可。文件夹中提供一个client的windows下的执行文件,修改clientconfig.txt为服务器的ip和端口号运行即可。


7、kikilib网络库使用:
1、继承EventService类(专属于一个socket,专注于服务该socket上发生的事件),实现其中的HandleConnectionEvent(),HandleReadEvent(),HandleErrEvent,HandleCloseEvent()函数即可,可自定义自己的私有成员,代替了大多数网络库中的context上下文指针,生命器管理也更容易。
2、将具体的EventService类型放在EventMaster模板中,服务器即可运转,每有一个新的连接到来,EventMaster就会为新的连接创建一个该事件服务对象。
另外,网络库的大部分API都在EventService类中,这让使用变得更加方便,提供以下API:
1、提供自身socket的操作API
2、提供自身事件相关的操作API
3、提供定时器相关的操作API
4、提供线程池工具的操作API
5、提供socket缓冲区的读写操作API
以echo服务器为例:

	class EchoService : public kikilib::EventService
	{
	public:
		EchoService(kikilib::Socket sock, kikilib::EventManager* evMgr)
			: EventService(sock, evMgr)
		{ };

		~EchoService() {};

		virtual void handleReadEvent()
		{
			std::string str = readAll();
			sendContent(std::move(str));
			forceClose();
		};
	};

	int main()
	{
		kikilib::EventMaster<EchoService> evMaster;
		evMaster.init(4, 80);
		evMaster.loop();
		return 0;
	}


8、并发度
测试环境:4核CPU3.70GHz,8G内存3200MHz
使用webbench对本机http(读取指定文件发送然后关闭连接)进行了简单的压力测试,QPS两万多:

qps
使用webbench对本机echo进行了简单的压力测试,QPS四万左右:

echo_qps
附:有什么需求或者bug,建议,问题,都可以邮件 390161495@qq.com 讨论交流,谢谢。

About

An Object-oriented Lightweight High Performance C++ Network Library For Linux System

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages