面向对象使用的轻量化高并发Linux c++网络库kikilib

kikilib是一个轻量级、高并发、符合OOP原则的C++网络库,采用Reactor模型+非阻塞IO,实现One Loop One Thread。它简化了回调函数的使用,用户只需实现EventService子类。库包括框架、Socket、定时器、线程池、读写缓冲区、日志和对象池等功能。通过工厂模式实例化用户定义的EventService对象,避免了回调函数和上下文指针的复杂管理。提供了简单的使用示例和详细实现原理。
摘要由CSDN通过智能技术生成

目录

一、概述

二、使用

三、实现

1、框架

2、Socket

3、定时器

4、线程池

5、读写缓冲区

6、日志

7、对象池

四、测试

五、遇到的问题mark

六、后续


一、概述

       

       kikilib网络库是轻量,高性能,纯c++11,更符合OOP语言特点且易于使用的一个Linux服务器网络库。并发模型使用的是Reactor模型+非阻塞IO,坚持One Loop One Thread,基于反馈的负载均衡策略派发新连接。

       什么是面向对象使用的网络库呢?

       之前我们使用的网络库一般都是写一个回调函数,然后set_callback进网络库中,并配合context上下文指针使用。但是在c++中,为何不直接写一个类作为回调函数和上下文成员共同的载体呢,其中上下文的内容作为private成员(这也是符合语义的),回调函数作为类的成员函数,这样做也更符合C++这个OOP语言的特点,何乐而不为。基于这个想法,我写了这个网络库。

       Github源码地址: https://github.com/YukangLiu/kikilib

       老哥们顺便去给个star呗~

 

二、使用

       这个网络库的使用非常简单,只需要实现一个EventService子类就可以了。以我的echo为例:       

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

		~EchoService() {};

		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;
	}

       从头到尾都不需要设置回调函数和对应一个连接的上下文指针。

       使用这个网络库的核心是一个EventService类,提供了一些供用户使用的API,还有几个处理各种事件的虚函数。这个类可以理解成“为一个连接中的各种事件服务”的类,用户继承这个类,上下文记录信息作为该类的私有成员,实现要处理的事件的处理函数即可。

       这里就会出现一个问题,网络库如何实例化用户的这个对象呢?有两种方法,一是使用模板,二是使用工厂。这里我选择了将两种方式融合,即用户只需要将自己实现的具体EventService子类放在EventMaster的模板中就可以使用了,而在网络库内部是用工厂生产对象的。这样做的原因如下:第一,如果让用户再去实例化一个工厂那使用起来太麻烦了,这个是主要原因。第二,那为何还要加入工厂呢,因为将生产对象这个动作剥离出来的话,可以让类的职责更加分明,未来需要加入EventService对象池的话可以嵌到工厂中。

       具体的使用方法可以参看http和chatroom,分别是我用这个库实现的一个简单的静态网页服务器和一个聊天室(广播)服务器。

       http的测试站点:http://www.liuyukang.com/

 

三、实现

1、框架

       模型如下:

 

       大体上可以说是Reac

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值