[muduo网络库]——muduo库的Reactor模型(剖析muduo网络库核心部分、设计思想)

一、前言

在学习 C++ 服务端的过程中,必不可少的一项就是熟悉一个网络库,包括网络库的应用和其底层实现。我们熟知的网络库有 libevent、libev、muduo、Netty 等,其中 muduo 是由陈硕大佬个人开发的 TCP 网络库,最近跟着课程正在深度剖析其内在,并跟着老师用c++11重构了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监听到有新事件产生,分发器返回事件给反应堆,反应堆调用相应的事件处理器eventhandler;
  • eventhandler中读取用户的请求,解码,处理,打包,发送。

在muduo库的Reactor模型上:

  • Poller和EPollPoller就是Demultiplex
  • Channel封装了Event,里面存在fd,events,revents,以及相应的回调函数callbacks,其中有两种channel,acceptorChannel以及connectionChannel分别对应listenfd以及connfd
  • EventLoop就是Reactor

这也就看出muduo库的三个核心组件是:Channel类、Poller/EpollPoller类以及EventLoop类这三个组件之间的关系如下图所示:

代码地址:https://github.com/Cheeron955/mymuduo/tree/master

本小节就到这里,下一篇我会对着三个核心组件进行一个详细的剖析介绍,希望有需要的小伙伴可以持续关注哦~

相关推荐
CoderYanger3 分钟前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节
3***31214 分钟前
java进阶1——JVM
java·开发语言·jvm
charlie11451419110 分钟前
深入理解C/C++的编译链接技术6——A2:动态库设计基础之ABI设计接口
c语言·开发语言·c++·学习·动态库·函数
Cx330❀13 分钟前
C++ STL set 完全指南:从基础用法到实战技巧
开发语言·数据结构·c++·算法·leetcode·面试
white-persist16 分钟前
【攻防世界】reverse | Reversing-x64Elf-100 详细题解 WP
c语言·开发语言·网络·python·学习·安全·php
FeiHuo5651516 分钟前
微信个人号开发中如何高效实现API二次开发
java·开发语言·python·微信
zmzb010318 分钟前
C++课后习题训练记录Day33
开发语言·c++
HKT_China19 分钟前
香港电讯与Fortinet推出100G高效加密网络托管服务,迈进量子安全新时代
网络·安全
csbysj202020 分钟前
Bootstrap 折叠
开发语言
Want59536 分钟前
C/C++贪吃蛇小游戏
c语言·开发语言·c++