muduo网络库剖析——监听者Poller基类

这篇具有很好参考价值的文章主要介绍了muduo网络库剖析——监听者Poller基类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前情

从muduo到my_muduo

作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精华进行简要实现,这要求我们足够了解muduo库。

做项目 = 模仿 + 修改,不要担心自己学了也不会写怎么办,重要的是积累,学到了这些方法,如果下次在遇到通用需求的时候你能够回想起之前的解决方法就够了。送上一段话!

muduo网络库剖析——监听者Poller基类,muduo网络库精解,重构与拓展,网络,c++,开源,个人开发,linux,后端,服务器

概要

Poller基类定义了监听所有channel通道的监听者应该干哪些事情。它积极地监听着所有channel通道所发生的事情,并实时反应到channel,让channel update。

框架与细节

成员

muduo网络库剖析——监听者Poller基类,muduo网络库精解,重构与拓展,网络,c++,开源,个人开发,linux,后端,服务器
protected属性,让子类可以O(1)查找Poller中是否在监听某个channel。private属性中,有一个EventLoop指针对象,代表Poller属于哪个EventLoop。

函数

muduo网络库剖析——监听者Poller基类,muduo网络库精解,重构与拓展,网络,c++,开源,个人开发,linux,后端,服务器
监听者应该具备监听功能,将监听到的事件放入到activeChannel通道中;更新某个channel状态和删除某个channel的功能,判断Poller中是否存在某个channel;作为基类,需要提供工厂方法根据宏来选择创建具体的Poller类型。

poll,updateChannel,removeChannel设为纯虚函数不做处理,等子类对相应的函数进行细节处理。

使用方法

源码

//Poller.h
#pragma once

#include <vector>
#include <unordered_map>

#include "noncopyable.h"
#include "Timestamp.h"
#include "Channel.h"
class Channel;
class EventLoop;

class Poller : noncopyable {
public:
    using ChannelList = std::vector<Channel*>;
    Poller(EventLoop* loop) : loop_(loop) {};
    virtual ~Poller() = default;
    virtual Timestamp poll(int timeoutMs, ChannelList* activeChannels) = 0;
    virtual void updateChannel(Channel* channel) = 0;
    virtual void removeChannel(Channel* channel) = 0;
    bool hasChannel(Channel* channel) const;
    static Poller* newDefaultPoller(EventLoop* loop);
protected:
    using ChannelMap = std::unordered_map<int, Channel*>;
    ChannelMap channels_;
private:

    EventLoop* loop_; 
};

//Poller.cc
#include "Poller.h"

bool Poller::hasChannel(Channel* channel) const {
    auto it = channels_.find(channel->fd());
    return it != channels_.end() && it->second == channel;
}

结尾

以上就是监听者Poller基类的相关介绍,以及我在进行项目重写的时候遇到的一些问题,和我自己的一些心得体会。发现写博客真的会记录好多你的成长,而且对于一个好的项目,写博客也是证明你确实有过深度思考,并且在之后面试或者工作时遇到同样的问题能够进行复盘的一种有效的手段。所以,希望uu们也可以像我一样,养成写博客的习惯,逐渐脱离菜鸡队列,向大佬前进!!!加油!!!

也希望我能够完成muduo网络库项目的深度学习与重写,并在功能上能够拓展。也希望在完成这个博客系列之后,能够引导想要学习muduo网络库源码的人,更好地探索这篇美丽繁华的土壤。致敬chenshuo大神!!!

鉴于博主只是一名平平无奇的大三学生,没什么项目经验,所以可能很多东西有所疏漏,如果有大神发现了,还劳烦您在评论区留言,我会努力尝试解决问题!文章来源地址https://www.toymoban.com/news/detail-800613.html

到了这里,关于muduo网络库剖析——监听者Poller基类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • muduo网络库剖析——套接字Socket类

    作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精华进行简要实现,这要求我们足够了解muduo库。 做项目 = 模仿 + 修改,不要担心自己学了也不会写怎么办,重要的是积累,学到了这些方法,如果下次在遇

    2024年01月19日
    浏览(31)
  • 【数据结构】 栈的深度剖析!超详细精解!

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 数据结构解析 🌄 莫道桑榆晚,为霞尚满天! 什么是栈?栈这种数据结构有什么样的特性?它能够拿来干嘛?本文我们将深度探讨,剖析清楚栈的全部,你让熟练掌握栈的运用! ​ 栈是一种特殊的线性表,其只允许在固定的一端进行

    2024年02月08日
    浏览(39)
  • 长文梳理Muduo库核心代码及优秀编程细节剖析

    代码地址: https://github.com/yyg192/Cpp11-Muduo-MultiReactor  Muduo库是陈硕个人开发的Tcp网络编程库,支持Reactor模型。本人前段时间出于个人学习目的用c++11重构了Muduo库中核心的Multi-Reactor架构。这篇博文对Muduo库中的Multi-reactor架构代码进行逻辑梳理,同时认真剖析了作者每一处精妙

    2024年02月12日
    浏览(40)
  • go 网络 network poller

    假如需要开发者去实现一套新的网络协议(例如 redis 的resp), 是基于TCP的, 那tcp这层的协议,是否需要开发者自己去实现? 这层如果自己实现, 其实很复杂, 会涉及很多算法相关. 因此, 出现了 socket 对传输层进行了抽象, 开发者不需要关注传输层具体的实现, 使用socket提供的接口,

    2024年02月05日
    浏览(37)
  • 使用muduo库编写网络server端

    muduo库源码编译安装和环境搭建 C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 打开一个linux终端写下编译命令 运行server端之后,再打开一个终端,运行telnet命令作为客户端进行测试

    2024年01月19日
    浏览(29)
  • 【C++】开源:Muduo网络库配置与使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/chenshuo/muduo Muduo 是一个基于

    2024年02月15日
    浏览(33)
  • 基于muduo网络库实现的集群聊天服务器

    !!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!! !!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!! !!!项目是照着腾讯课堂施磊老师的视频学习,仅供个人学习记录使用!!! 使用muduo网络库搭建网络核心模块

    2024年04月26日
    浏览(35)
  • 一、重写muduo网络库之服务器编程及测试

    目录 一、基于muduo网络库开发服务器程序的基本步骤 1、组合TcpServer对象 2、创建EventLoop事件循环对象的指针 3、明确TCPServer构造函数需要的参数,输出ChatServer的构造函数 4、在当前服务器类的构造函数当中,注册处理连接的回调函数和处理读写事件的回调函数 5、设置合适的

    2024年02月04日
    浏览(41)
  • go network poller 一

    假如需要开发者去实现一套新的网络协议(例如 redis 的resp), 是基于TCP的, 那tcp这层的协议,是否需要开发者自己去实现? 这层如果自己实现, 其实很复杂, 会涉及很多算法相关. 因此, 出现了 socket 对传输层进行了抽象, 开发者不需要关注传输层具体的实现, 使用socket提供的接口,

    2024年02月05日
    浏览(41)
  • 重构Transformer神经网络:优化的自注意力机制和前馈神经网络

    标题:重构Transformer神经网络:优化的自注意力机制和前馈神经网络 摘要: 本论文研究了一种改进的Transformer神经网络模型,该模型使用区别于传统自注意力机制的新型注意力机制,以及优化的前馈神经网络。而且,该模型还引入了非线性激活函数以增强模型的表现力。实验

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包