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

项目模块五:poller模块

一、模块目的

通过 epoll 来实现对描述符的IO事件监控

二、模块设计

1、成员变量

epoll 描述符:int _epfd;

就绪事件的存储容器:struct epoll_event _evs[SIZE];

epoll_event ev;

ev.data.fd 表示关心的特定的描述符

ev.events 表示关心特定描述符的特定事件

sockfd 与 channel 指针的对应哈希表:unordered_map<int, Channel*> _channels;

2、成员函数

(1)私有函数1:对 epoll 的直接操作 void Update(Channel *channel, int op)

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *ev);

(2)私有函数2:判断 channel 是否已经被监控 bool HasChannel(Channel *channel)

return _channels.find(channel->Sockfd()) == _channels.end() ? false : true;

(3)公有函数1:构造函数用来创建 _epfd 

int epoll_create(int size);

size 已经不用,传一个大于0的数即可。

(4)公有函数2:添加 / 修改关心事件 void UpdateEvent(Channel *channel)

先看 channel 是否存在,存在就用 EPOLL_CTL_MOD

不存在要先添加到哈希表再用 EPOLL_CTL_ADD

(5)公有函数3:删除监控 void RemoveEvent(Channel *channel)

先删除哈希表节点再调用 Update 函数

(6)公有函数4:等待事件就绪并加入活跃队列 void Pool(vector<Channel*> *active)

int epoll_wait(int epfd, struct epoll_event *evs, int maxevents, int timeout);

返回的是等待了几个事件就绪,evs 是输出型参数,得到就绪的结构体 epoll_event,里面存有对应的描述符和就绪事件,timeout 填 -1 表示阻塞等待事件就绪。

具体流程:

先得到返回值:int nfds = epoll_wait(_epfd, _evs, sizeof _evs, -1);

再 for 循环处理:

for(int i = 0; i < nfds; i++)

{

        // 先获得目标迭代器

        auto it = _channels.find(_evs[i].data.fd);

        // 再添加就绪事件

        it->second->SetRevent(_evs[i].events);

        // 最后添加活跃队列

        active->push_back(it->second);

}

三、代码展示


http://www.mrgr.cn/news/54676.html

相关文章:

  • 在wpf 中 用mvvm 的方式 绑定 鼠标事件
  • 二叉树遍历(前序、中序、后续)
  • Scrapy | 使用Scrapy进行数据建模和请求
  • 监控易监测对象及指标之:Kafka中间件JMX监控指标解读
  • Android 内存优化——常见内存泄露及优化方案
  • 信雅纳Chimera 100G网络损伤仪助力Parallel Wireless开展5G RAN无线前传网络的损伤模拟
  • 智能工厂的软件设计 三个单词( link/relation/chain):自然语言的此一字库stock、形式语言的彼多字扇fan到人工语言的专有名词 之1
  • python 更换pip源
  • V2X介绍
  • 程序化交易中,如何编写盈利回撤一半平仓的策略?
  • DGCNN代码详解(一)
  • stm32实现esp8266连接到TCP服务器(二)未完
  • 如何打开CMD界面?打开CMD界面有几种方式
  • Chromium html<lable>c++接口定义
  • 3、面向对象之封装与继承(找工作版)
  • 【OD】【E卷】【真题】【100分】流浪地球(PythonJavaJavaScriptC++C)
  • python 模块 输入与输出
  • 探究互联网数字化商品管理变革:从数据化到精准运营的路径转型
  • Leaflet地图中实现绘图(点、线、多边形、圆等)功能
  • 美学心得(第二百六十八集) 罗国正
  • 机器学习【工业高精度计算及其应用】
  • C++头文件大全及解释(补丁)
  • 一 、揭秘操作系统架构:从整体式到微内核的技术演变
  • <Project-11 Calculator> 计算器 0.3 年龄计算器 age Calculator HTML JS
  • 可达性分析法
  • 力扣71~75题