网站建设合同副本,珠海微网站建设,有什么网站可以做代理的,仿牌网站怎么做301跳转一、前言
在学习 C 服务端的过程中#xff0c;必不可少的一项就是熟悉一个网络库#xff0c;包括网络库的应用和其底层实现。我们熟知的网络库有 libevent、libev、muduo、Netty 等#xff0c;其中 muduo 是由陈硕大佬个人开发的 TCP 网络库#xff0c;最近跟着课程正在深…一、前言
在学习 C 服务端的过程中必不可少的一项就是熟悉一个网络库包括网络库的应用和其底层实现。我们熟知的网络库有 libevent、libev、muduo、Netty 等其中 muduo 是由陈硕大佬个人开发的 TCP 网络库最近跟着课程正在深度剖析其内在并跟着老师用c11重构了Muduo库中核心的Multi-Reactor架构Muduo库还有很多需要学习的内容比如rpc、HTTP等通信协议poll的使用等还没有进行学习之后有机会会一一补上所以在此写一个[muduo网络库]系列的一些梳理笔记剖析一下大佬精妙的代码设计思想希望能够理清自己的思路也希望能够帮助到大家。 最后本人为初学者还在不断的摸索过程中这个系列的内容可能存在大量不足希望路过的各位大佬们看到问题能够提出来我一定虚心接受并且及时作出更正。希望大家能够持续关注这个系列这也督促我能够一直写下去。 这一节先来介绍muduo网络库的模型。
二、muduo 模型
Muduo库是基于Reactor模式实现的TCP网络编程库。其中的重要组件是由**Event(事件)、Reactor(反应堆)、Demultiplex(事件分发器)和Evanthandler(事件处理器)**四部分构成的其相互关系如下图所示
首先将事件Event注册到反应堆Reactor上即将应用程序感兴趣的事件注册到反应堆上请求反应堆帮助监听若事件发生反应堆调用应用程序预制的回调(handler)一个event对应一个handler反应堆Reactor相当于是一个事件以及事件处理的集合通过相应的方法在事件分发器Demultiplex里做一个相应的调整add/mod/del event然后启动事件循环epoll_wait服务器处于阻塞状态等待新用户的连接或者已连接用户的读写事件如果epoll_wait监听到有新事件产生分发器返回事件给反应堆反应堆调用相应的事件处理器eventhandlereventhandler中读取用户的请求解码处理打包发送。
在muduo库的Reactor模型上
Poller和EPollPoller就是DemultiplexChannel封装了Event里面存在fdeventsrevents以及相应的回调函数callbacks其中有两种channelacceptorChannel以及connectionChannel分别对应listenfd以及connfdEventLoop就是Reactor
这也就看出muduo库的三个核心组件是Channel类、Poller/EpollPoller类以及EventLoop类这三个组件之间的关系如下图所示 代码地址https://github.com/Cheeron955/mymuduo/tree/master 本小节就到这里下一篇我会对着三个核心组件进行一个详细的剖析介绍希望有需要的小伙伴可以持续关注哦~