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

怎样做分类网站邢台163招聘最新信息

怎样做分类网站,邢台163招聘最新信息,宝塔面板wordpress静态化,寺庙网站建设方案仿muduo库实现并发服务器 1.Poller模块成员变量创建epoll模型对于一个描述符添加或修改事件监控对于一个描述符移除事件监控启动epoll事件监控#xff0c;获取所有活跃连接 1.Poller模块 Poller模块主要是对任意的描述符进行IO事件监控。 它是对epoll的封装#xff0c;可以让… 仿muduo库实现并发服务器 1.Poller模块成员变量创建epoll模型对于一个描述符添加或修改事件监控对于一个描述符移除事件监控启动epoll事件监控获取所有活跃连接 1.Poller模块 Poller模块主要是对任意的描述符进行IO事件监控。 它是对epoll的封装可以让对描述符进行事件监控的操作更加简单。 它与Channel的关系 一旦有活跃事件了只有获取到这个连接的Channel对象才能知道该连接要监控的事件是什么知道事件就绪如何去处理。 主要的流程 1.对描述符进行监控但是要注意监控的对象是channel对象因为只有channel对象才能找到该描述符要监控什么事件。 2.当描述符就绪时通过描述符映射找到channel对象(通过hash找到channel对象)因为只有找到channel对象才能知道就绪的事件如何处理。所以当描述符就绪时就返回对应的channel对象。 成员变量 private:int _epfd; // 用来标识epoll模型struct epoll_event _evs[DEFALUTMAX]; // 用来保存所有就绪的事件信息,信息1就绪的描述符fd是谁。信息2就绪的事件是什么std::unordered_mapint, Channel * _channel; // 用来保存所有要监控的描述符信 1.poller是封装epoll对描述符进行操作所以一定要有一个epoll句柄。 2.当事件就绪时就绪的事件信息就会保存在struct epoll_event 结构体数据中保存的信息有就绪的描述符fd就绪的事件。 3.poller是用来监控管理所有要监控的描述符所以需要一个容器保存所有监控的描述符。 而poller监控的对象是channel所以使用hash通过描述符映射对应的channel。这样就可以保存管理所有监控的描述符对象。 创建epoll模型 创建epoll模型使用epoll_create()接口返回值就是对应的epoll句柄。 // 创建epoll模型Poller(){_epfd epoll_create(DEFALUTMAX); // 创建一个epoll模型if (_epfd 0){ERRLog(epoll create failed);abort(); // 这个出错了就直接退出}}对于一个描述符添加或修改事件监控 对描述符进行添加或修改事件监控需要使用的接口是epoll_ctl()不过这里对epoll_ctl()的操作先封装起来外部直接调用这个封装好的epoll_ctl接口 要想对一个描述符添加事件监控首先需要知道该描述符的fd要监控的事件是什么要进行操作是什么等细节。而描述符的fd以及要监控的事件是什么都在channel对象里所以传入一个channel对象以及所需要进行操作即可。 不过在对一个连接真正添加和修改或者移除事件之前还是需要判断一个该连接是否已经被添加到内核里面去了如果已经被添加进去了那么要进行的操作就是更新修改了就不是添加了。所以我们还需要封装一个判定是否已经设置了监控的接口。 如何判断呢就判断管理的哈希表中是否存在对于的channel对象即可。 // 直接对epoll_ctl进行操作void Update(Channel *channel, int op){int fd channel-Fd();//获取该channnel对应的描述符fdstruct epoll_event ev;ev.data.fd fd;//设置要关系的fdev.events channel-Events();//设置要关系的事件int ret epoll_ctl(_epfd, op, fd, ev);//对于一个描述符进行添加或修改事件监控if (ret 0){ERRLog(epoll_ctl failed);}}// 判断一个连接channel是否设置了事件监控,就看_channel中是否有该连接bool HasChannel(Channel *channel){auto it _channel.find(channel-Fd());if (it _channel.end())return false; // 没找到return true;}所以在内部封装了两个接口对外真正提供的接口则是 // 对于一个描述符添加或修改事件监控void UpdateEvent(Channel *channel){// 首先判断该连接是否已经被设置监控了如果没有则添加监控如果有则进行修改if (HasChannel(channel) false){_channel.insert(std::make_pair(channel-Fd(), channel));//_channel[channel-Fd()]channel;Update(channel, EPOLL_CTL_ADD);//}else{Update(channel, EPOLL_CTL_MOD);}}对于一个描述符移除事件监控 对于描述符进行移除事件监控主要有两个步骤 1.从管理的hash表里移除(erase) 2.从红黑色树上移除(epoll_ctl,DEL) // 对于一个描述符移除事件监控void RemoveEvent(Channel *channel){auto it _channel.find(channel-Fd());//在哈希表中找到该channel对象if (it ! _channel.end()){_channel.erase(it);//从哈希表中删除该channnel对象}Update(channel, EPOLL_CTL_DEL);//从内核中删除该监控}启动epoll事件监控获取所有活跃连接 启动事件监控就是epoll进行等待事件就绪。 当有事件就绪时epoll就不再等待就会返回并将就绪的信息带回来。 就绪的信息有哪个文件描述符的什么事件就绪了光有这些信息是没有用的因为对于描述符的channel对象不知道什么事件就绪啊只有channel对象才能知道就绪后该怎么操作。所以需要将该描述符的什么事件就绪信息设置进对应的channel对象中(通过描述符在哈希表中映射找到channel对象)这样channel对象才能知道它就绪了什么事件并且可以进行对应的处理 所以我们可以通过一个vector数组将所有就绪的channel对象全部存储起来。 供外层eventloop取出全部依次执行对应的操作。 操作 1.epoll进行等待监控 2.epoll返回将就绪的信息设置到对应的channel对象中 3.保存所有就绪的channel对象。 通过一个输出型参数将数据带出来。 // 开始监控,并返回所有活跃连接void Poll(std::vectorChannel * *active){int nfds epoll_wait(_epfd, _evs, DEFALUTMAX, -1); // 默认为阻塞等待if (nfds 0){if (errno EINTR){return;}ERRLog(epoll wait failed:%s\n, strerror(errno));abort();}for (int i 0; i nfds; i)//有事件就绪了{int fd _evs[i].data.fd; // 活跃的fd是哪个、assert(_channel.find(fd) ! _channel.end()); // 不能在管理的channel里找不到// 找到之后就将就绪的事件信息设置到对应的channel里_channel[fd]-SetRevents(_evs[i].events);active-push_back(_channel[fd]); // 将活跃的连接插入进去保存起来}}
http://www.zqtcl.cn/news/956946/

相关文章:

  • 泰安网站建设推荐软件商店电脑版官方下载
  • 站长平台网站报价单模板表格
  • 织梦做的网站老是被黑杭州网站设计询问蓝韵网络
  • wordpress手机版如何设置福鼎整站优化
  • 网站建设小程序定制开发北京东宏建设网站
  • 网站制作还花钱网站图怎么做
  • 免费搭网站wordpress minty
  • 海沧建设网站多少国外调色网站
  • 中企动力建站怎么样网站建设与设计的心得体会
  • 打开网站出现directoryj2ee做网站
  • 如何建设一个视频网站西安个人做网站
  • wordpress站群教程市场营销培训课程
  • 17网站一起做网店白沟简单网页制作图片
  • 网站建设项目需求分析流程做商业地产的网站
  • 百度建站商业网点的定义
  • 古镇建设网站经济研究院网站建设方案
  • 会员网站开发百度自己的宣传广告
  • 重庆网络推广网站推广自己设计图纸的软件
  • 国内免费的短视频素材网站什么网站做博客好
  • 个体户网站建设wordpress修改作者链接
  • 做企业网站怎么样如何做网站的登录注册
  • 网站建设中标怎么做网站文字图片
  • 济南网站推广徽hyhyk1公司展示网站模板
  • ae免费模板下载网站视频网站数据库设计
  • 找做金融的网站网站建设方面存在的问题
  • 门户网站建设与开发wordpress添加文章总数标签总数
  • 想创办一个本地的人才招聘网站_如何做市场调查问卷windows7优化大师下载
  • 做网站建设要什么证视频付费网站建设
  • html网站建设实例代码软件下载app排行榜
  • 高端个人网站网站建设密码