从epoll构建muduo-4 加入Channel

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
epoll构建muduo-1 mini-muduo介绍 前段时间看了陈硕写的muduo网络库(github, 书, blog),觉得这是一个学习网络编程的非常好的素材。为了更好的了解这个库,自己花了点时间,模仿其源码从零开始编写了一个极小的mini-muduo(起这名字没版权问题吧:-)),代码编写过程中有很多收获,我打算写几篇文章记录下心得。有几个问题先说明一下: Q1:网络库很多,为什么选择muduo?     1 库的功能相对完整,基 阅读详情

相关推荐

epoll构建muduo-2 最简单的epoll

mini-muduo v 0.01版本,这是mini-muduo的第一个版本,整个程序是一个100行的epoll示例 下面粘贴的代码省略了头文件引用,完整可运行的示例可从github下载,使用命令git checkout v0.01可切换到此版本,在线浏览到这里 #define MAX_LINE 100 #define MAX_EVENTS 500 #define MAX_LISTENFD

voidccc的专栏 6170

讲一下epoll

先认识一下select 和 poll select 过程: 首先将一个连接分配一个channel,然后注册到select上面,每一个channel都有一个自己的状态,表示自己是否就绪,然后select 会遍历所有的channel,然后判断是都就绪,就绪的话就开启一个线程为他分配一个buffer,然后去读写操作 poll : 因为select能存储的fd,只有1024个,所以会限制并发量。se...

JZWen 289

epoll构建muduo-6 加入EventLoop和Epoll

mini-muduo v0.05版本,完整可运行的示例可从github下载,使用命令git checkout v0.05可切换到此版本,在线浏览此版本到这里 本版将程序的主要类都加入进来了,这个版本可以作为一个里程碑版本,最重要的修改是加入了两个类EventLoop和Epoll加入这两个类后,程序代码逻辑就相对清晰多了。为了有个更直观的了解,我们对照之前介绍的最简单epoll示例(从epoll

voidccc的专栏 4010

epoll服务端程序增加Channel

epoll服务端程序增加Channel

fucheng的博客 587

找工作小项目:day5-channel的使用

回忆一下,之前关于epoll的使用都是将某个socket加入到红黑树中,但是我们从来没在乎过事件是什么,事件需要我们做什么处理,今天要加入channel就是为了能区分事件类型,那么接下来看看channel是怎么做的吧。

ablelay的博客 1050

30天自制C++服务器day05-epoll高级用法-Channel登场

day05-epoll高级用法-Channel登场 在上一天,我们已经完整地开发了一个echo服务器,并且引入面向对象编程的思想,初步封装了Socket、InetAddress和Epoll,大大精简了主程序,隐藏了底层语言实现细节、增加了可读性。 让我们来回顾一下我们是如何使用epoll:将一个文件描述符添加到epoll红黑树,当该文件描述符上有事件发生时,拿到它、处理事件,这样我们每次只能拿到一个文件描述符,也就是一个int类型的整型值。试想,如果一个服务器同时提供不同的服务,如HTTP、FTP等,那么就

冯岳松的博客 1433

[muduo网络库]——muduo库三大核心组件之Channel类(剖析muduo网络库核心部分、设计思想)

muduo 是由陈硕大佬个人开发的 TCP 网络库,本专栏使用c++11重构了Muduo库中核心的Multi-Reactor架构,剖析大佬核心的代码设计思想,希望能够理清自己的思路,也希望能够帮助到大家

m0_73537205的博客 1708

muduochannel

channelmuduo中的事件分发器,它只属于一个EventLoop,Channel类中保存着IO事件的类型以及对应的回调函数,每个channel只负责一个文件描述符,但它并不拥有这个文件描述符。channel是在epoll和TcpConnection之间起沟通作用,故也叫做通道,其它类通过调用channel的setCallbcak来和建立channel沟通关系。 Chan...

2万+

muduo网络库剖析——通道Channel

基于c++的muduo网络库开源项目深度剖析!超级加分的简历项目,期待您的讨论~

weixin_62021811的博客 1414

2.muduoChannel

Channel类主要作用:1.将文件描述符(可能是socket类型,eventfd类型,timefd类型,signalfd类型)封装,通过该类设置各种事件的回调函数(例如读回调,写回调,关闭回调等)。2.可以设置自己的监听事件类型,然后根据该类型更新poller对象(epoll或者poll)对该类的操作(例如添加,修改,删除操作)。3.根据自己监听到的事件类型触发回调函数。 1.Channel.h文件 /// ///一个能被选择的 I/O channel //这个类不拥有自己的文件描述符 /// 这个文件描

qq_42987442的博客 2万+

MuduoChannel源码解析

MuduoChannel源码解析前面我们分析了Acceptor处理连接请求,之后创建TcpConnection对象分发给合适的EventLoop,而TcpConnection里面是包含Channel,EventLoop以及相应的socket fd的,我们就可以假想成TcpConnection是针对一个连接的所有东西(socket,回调函数等)。但是对于socket的事件监听最后是需要装载到Pool

Aaron的专栏 834

muduo Poller 和 Channel

muduo Poller和ChannelPollerPollPollerupdateChannelPollPollPoller Poller Poller class 是 IO multiplexing(多路复用)的封装,是一个纯虚类。 /// /// Base class for IO Multiplexing /// /// This class doesn't own the Channel objects. class Poller : noncopyable { public: typede

weixin_42653406的博客 700

手写muduoChannel通道

手写muduoChannel模块的核心组件

m0_62689947的博客 1210

muduoEPollPoller

看一下muduo实现的epoll // Copyright 2010, Shuo Chen. All rights reserved. // http://code.google.com/p/muduo/ // // Use of this source code is governed by a BSD-style license // that can be found...

1万+

[Muduo网络库]:三大核心库Channel类、Poller/EpollPoller类以及EventLoop类

除了循环,什么都没做的loop()",这句话的意思并非是loop()只是一个空循环,而是它的主要功能并未通过自身定义的函数实现。loop函数中主要通过调用一次Poller::poll方法它就能给你返回事件监听器的监听结果,然后调用这些Channel里面保管的不同类型事件的处理函数。loop()函数最主要的作用是实现循环,负责驱动“循环”的重要模块。Channel类其实相当于一个文件描述符的保姆!2.2.1 Channel类概述-我在地铁站里吃闸机。

weixin_45807759的博客 1411

[muduo网络库]-muduo库Poller/EPollpoller解析

本贴用于记录库的学习过程,以下是关于Poller\EPollpoller类的个人理解。Poller\EPollpoller作为三大核心组件之一,主要功能是为eventloop监听事件,并返回待处理的channel。下面是Poller在eventloop中的大概模型:大家都知道Poller是通过子类EPollpoller实现的,但是为什么要怎么设计呢?直接把具体实现在Poller里写出来不就好了吗。

2301_81131022的博客 2127

Muduo网络库实现 [四] - Channel模块

具体来说每一个套接字都会对应一个 Channel 对象,用于对它的事件进行管理。可以对于描述符的监控事件在用户态更容易维护,以及触发事件后的操作流程更加的清晰 Channel模块是用于对一个描述符所需要监控的事件以及事件触发之后要执行的回调函数进行管理的

2402_83315537的博客 1051

Muduo网络库:实现Channel通道以及Poller抽象基类》

封装socket地址类型、实现Channel通道、Poller抽象基类、EpollPoller类。理清EventLoop、Channel、Poller三者之间的关系,为实现EventLoop事件循环做准备

2202_75924820的博客 1136

Muduo类详解之Channel

同时Channel类还提供了设置该fd的感兴趣事件,以及将该fd及其感兴趣事件注册到事件监听器或从事件监听器上移除,以及保存了该fd的每种事件对应的处理函数。revents_代表事件监听器实际监听到该fd发生的事件类型集合,当事件监听器监听到一个fd发生了什么事件,通过Channel::set_revents()函数来设置revents值。持有⼀个⽂件描述符,正在监听的事件,已经发⽣的事件(由Poller 返回),以及各个事件(读、写、更新、错误)回调函数的 Function 对象。

dont worry about it的博客 4万+
上一篇: 从epoll构建muduo-3 加入第一个类,顺便介绍reactor
下一篇: 从epoll构建muduo-5 加入Acceptor和TcpConnection
voidccc
博客等级 码龄14年 149粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值