栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2022年6月12日记:Linux服务器开发,King老师,reactor的原理与实现

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022年6月12日记:Linux服务器开发,King老师,reactor的原理与实现

推荐一个 零声学院 免费公开课程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习]
后台服务器:https://course.0voice.com/v1/course/intro?courseId=5&agentId=0


即时通信:先判断listenfd有数据可读就读出来,通过协议判断出目标,再转发给目标。
reactor反应堆模型:一个事件对应一个回调函数。readable–readcb。

epoll_wait在返回一瞬间既可读又可写有没有可能?
回答是有的!一次处理一个事件就是写一个回调函数。

struct item{
	int fd;
	int events;
#if 1
	int (*callback)(int fd,int event,void *arg);
#else
	int (*readcb)(int fd,int event,void *arg);
	int (*writecb)(int fd,int event,void *arg);
#endif
	int sbuffer[1024];
	int slength;
	int rbuffer[1024];
	int rlength;
};
int read_callback(int fd,int event,void *arg)
{
	epoll_ctl(epfd,EPOLL_CTL_MOD,event,ev);
}
struct itemblock{
	struct itemblock *next;
	struct nitem *items;
};
struct reactor{
	int epfd;
	struct nitemnlock *head;
	struct nitemnlock **last;
};

引入单例模式

struct reator *instance=NULL;
struct reactor *getinstance(void *){
			if(instance==NULL)
			{
					instance=malloc(sizeof(struct reactor));
						if(instance == NULL ) return NULL;
						memset(instance,0,sizeof(struct reactor));
							if(0>init_reactor(instance))
							{
									return NULL;	
								}
			}
			return instance;
}

对于一个新的连接而言,会先处理acceptcb,再去处理其他的。

总结

引入reactor,将对io的管理改为对事件的管理,我们对事件的管理。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号