Code Monkey home page Code Monkey logo

kikilib's Introduction

kikilib网络库

blog:https://blog.csdn.net/weixin_42333737/article/details/103408007

版本说明

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,建议,问题,都可以邮件 [email protected] 讨论交流,谢谢。

kikilib's People

Contributors

yukangliu avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.