当前位置: 首页 > news >正文

C++项目:仿muduo库高并发服务器-------Channel模块实现


文章目录

  • 前言
  • 一、Channel模块
  • 二、代码实现


前言

这个模块与其他模块关联比较强,所以些函数的设计并不完整,可以结合项目完整代码学习。


一、Channel模块

  • 功能:对⼀个描述符需要进行的IO事件管理,实现对描述符可读,可写,错误…事件的管理操作,以及IO事件监控就绪后,根据不同的事件,回调不同的处理函数功能。
  • 意义:让描述符的监控事件在用户态更易维护,触发事件后的操作流程更清晰
  • 功能设计:
    1. 对监控事件的管理:
      • 描述符是否可读
      • 描述符是否可写
      • 对描述符监控可读
      • 对描述符监控可写
      • 解除可读事件监控
      • 解除可写事件监控
      • 解除所有事件监控
    2. 对监控事件触发后的处理:
      • 设置对于不同事件的回调处理函数,明确触发某个事件后该如何处理

二、代码实现

//描述符事件管理
class Channel{
public:Channel(int fd):_fd(fd){};//类型重命名using EventCallback=std::function<void()>;int Fd(){return _fd; }//获取连接监控的事件uint32_t Events(){return _event;}//设置就序事件void SetREvent(uint32_t events){_revent=events;}//设置读事件回调void SetReadCallback(const EventCallback&cb){_read_callback=cb;}//设置写事件回调void SetWriteCallback(const EventCallback&cb){_write_callback=cb;}//设置错误事件回调void SetErrorCallback(const EventCallback&cb){_error_callback=cb;}//设置断开连接回调void SetCloseCallback(const EventCallback&cb){_close_callback=cb;}//设置任意事件回调void SetEventCallback(const EventCallback&cb){_event_callback=cb;}//当前是否监控了可读bool ReadAble(){return _event&EPOLLIN;}//当前是否监控了可写bool WriteAble(){return _event&EPOLLOUT;}//启用写事件监控void EnableRead(){_event|=EPOLLIN;//通过EventLoop接口设置到epoll}//启用读事件监控void EnableWrite(){_event|=EPOLLOUT;//...}//关闭读事件监控void DisableRead(){_event&=~EPOLLIN;//...}//关闭写事件监控void DisableWrite(){_event&=~EPOLLOUT;//...}//关闭所有事件监控void DisableAll(){_event=0;//...}//移除事件监控(从epoll将描述符移除)void Remove(){//通过EventLoop接口移除}//判断事件触发时该如何调用回调函数void HandleEvent(){if((_revent|EPOLLIN)||(_revent|EPOLLRDHUP)||(_revent|EPOLLPRI)){if(_read_callback){_read_callback();}//事件处理完毕刷新定时任务,防止处理期间超时if(_event_callback){_event_callback();}}//处理可能导致连接断开的事件,应该一次处理意见//如:写事件错误导致连接断开,则下面的事件没有判断的必要if(_revent|EPOLLOUT){if(_write_callback){_write_callback();}if(_event_callback){_event_callback();}}else if(_revent|EPOLLERR){if(_error_callback){_error_callback();}}else if(_revent|EPOLLHUP){if(_close_callback){_close_callback();}}}private:int _fd;uint32_t _event;//当前需要监控的事件uint32_t _revent;//当前连接触发的事件EventCallback _read_callback;//可读事件触发后的回调函数   事件触发后具体行为由connect管理来决定EventCallback _write_callback;//可写事件触发后的回调函数EventCallback _error_callback;//错误事件触发后的回调函数EventCallback _close_callback;//连接断开事件触发的回调函数EventCallback _event_callback;//任意事件触发后的回调函数
};
http://www.dtcms.com/a/407139.html

相关文章:

  • Python常用内建模块——hashlib
  • 《C++程序设计》笔记p7
  • 住房城乡建设网站查询wordpress 标签选项卡
  • 服务器机械硬盘能支撑高并发流媒体吗?
  • 奇妙数字(GESP五级202412T1)C++题解
  • 网站建设需要多少技术有备案号的网站是公司的吗
  • vscode壁纸插件(无主题修改)
  • OpenLayers地图交互 -- 章节十一:拖拽文件交互详解
  • 做网站优化的协议书免费网页制作的网站
  • 吃的网站要怎么做的企业管理咨询与诊断实践报告
  • Mac系统,Docker的MySQL + 本地 Canal
  • 零基础学Docker(3)--图形化管理工具Portainer
  • 远控中,游戏与应用中心功能如何开启?适用于哪些场景?
  • 零基础学Docker(4)--Docker镜像原理
  • 商丘网站制作报价信赖赛憬科技手机设计软件哪个好
  • R语言 生物分析中 富集分析的可视化,特别是气泡图和条形图的作用和解读
  • 上海市虹口市容建设公司网站文件外链生成网站
  • 利用h5做网站的心得学校网站建设意义有哪些方面
  • 美食网站建设多少钱wordpress又拍云cdn伪静态
  • 吴恩达d1
  • 第26讲 无监督机器学习
  • 【机器学习】我如何解释线性回归(欢迎指正讨论)
  • 申请的网站怎么建设广告公司加盟代理哪家好
  • STM32F4+RT-Thread IWDG 看门狗 开发实战:从驱动编写到“喂狗、超时复位”指南
  • 视频网站后台模板电影网站html代码
  • 从“黄金公式“到AI内容矩阵:快消品牌如何实现转化率8倍增长
  • Magick.NET库测试
  • 八、OpenCV中的常见滤波方式
  • ReAct与PlanReAct的定义及区别
  • 网站 廉政建设 板块中装建设官网