mini-muduo版本传送门
version 0.00 从epoll构建muduo-1 mini-muduo介绍
version 0.01 从epoll构建muduo-2 最简单的epoll
version 0.02 从epoll构建muduo-3 加入第一个类,顺便介绍reactor
version 0.03 从epoll构建muduo-4 加入Channel
version 0.04 从epoll构建muduo-5 加入Acceptor和TcpConnection
version 0.05 从epoll构建muduo-6 加入EventLoop和Epoll
相关推荐
从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
讲一下epoll
先认识一下select 和 poll select 过程: 首先将一个连接分配一个channel,然后注册到select上面,每一个channel都有一个自己的状态,表示自己是否就绪,然后select 会遍历所有的channel,然后判断是都就绪,就绪的话就开启一个线程为他分配一个buffer,然后去读写操作 poll : 因为select能存储的fd,只有1024个,所以会限制并发量。se...
从epoll构建muduo-6 加入EventLoop和Epoll
mini-muduo v0.05版本,完整可运行的示例可从github下载,使用命令git checkout v0.05可切换到此版本,在线浏览此版本到这里 本版将程序的主要类都加入进来了,这个版本可以作为一个里程碑版本,最重要的修改是加入了两个类EventLoop和Epoll。加入这两个类后,程序代码逻辑就相对清晰多了。为了有个更直观的了解,我们对照之前介绍的最简单epoll示例(从epoll构
为epoll服务端程序增加Channel类
为epoll服务端程序增加Channel类
找工作小项目:day5-channel的使用
回忆一下,之前关于epoll的使用都是将某个socket加入到红黑树中,但是我们从来没在乎过事件是什么,事件需要我们做什么处理,今天要加入的channel就是为了能区分事件类型,那么接下来看看channel是怎么做的吧。
30天自制C++服务器day05-epoll高级用法-Channel登场
day05-epoll高级用法-Channel登场 在上一天,我们已经完整地开发了一个echo服务器,并且引入面向对象编程的思想,初步封装了Socket、InetAddress和Epoll,大大精简了主程序,隐藏了底层语言实现细节、增加了可读性。 让我们来回顾一下我们是如何使用epoll:将一个文件描述符添加到epoll红黑树,当该文件描述符上有事件发生时,拿到它、处理事件,这样我们每次只能拿到一个文件描述符,也就是一个int类型的整型值。试想,如果一个服务器同时提供不同的服务,如HTTP、FTP等,那么就
[muduo网络库]——muduo库三大核心组件之Channel类(剖析muduo网络库核心部分、设计思想)
muduo 是由陈硕大佬个人开发的 TCP 网络库,本专栏使用c++11重构了Muduo库中核心的Multi-Reactor架构,剖析大佬核心的代码设计思想,希望能够理清自己的思路,也希望能够帮助到大家
muduo之channel
channel是muduo中的事件分发器,它只属于一个EventLoop,Channel类中保存着IO事件的类型以及对应的回调函数,每个channel只负责一个文件描述符,但它并不拥有这个文件描述符。channel是在epoll和TcpConnection之间起沟通作用,故也叫做通道,其它类通过调用channel的setCallbcak来和建立channel沟通关系。 Chan...
muduo网络库剖析——通道Channel类
基于c++的muduo网络库开源项目深度剖析!超级加分的简历项目,期待您的讨论~
2.muduo之Channel
Channel类主要作用:1.将文件描述符(可能是socket类型,eventfd类型,timefd类型,signalfd类型)封装,通过该类设置各种事件的回调函数(例如读回调,写回调,关闭回调等)。2.可以设置自己的监听事件类型,然后根据该类型更新poller对象(epoll或者poll)对该类的操作(例如添加,修改,删除操作)。3.根据自己监听到的事件类型触发回调函数。 1.Channel.h文件 /// ///一个能被选择的 I/O channel //这个类不拥有自己的文件描述符 /// 这个文件描
Muduo之Channel源码解析
Muduo之Channel源码解析前面我们分析了Acceptor处理连接请求,之后创建TcpConnection对象分发给合适的EventLoop,而TcpConnection里面是包含Channel,EventLoop以及相应的socket fd的,我们就可以假想成TcpConnection是针对一个连接的所有东西(socket,回调函数等)。但是对于socket的事件监听最后是需要装载到Pool
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
手写muduo之Channel通道
手写muduo库Channel模块的核心组件
muduo之EPollPoller
看一下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...
[Muduo网络库]:三大核心库Channel类、Poller/EpollPoller类以及EventLoop类
除了循环,什么都没做的loop()",这句话的意思并非是loop()只是一个空循环,而是它的主要功能并未通过自身定义的函数实现。loop函数中主要通过调用一次Poller::poll方法它就能给你返回事件监听器的监听结果,然后调用这些Channel里面保管的不同类型事件的处理函数。loop()函数最主要的作用是实现循环,负责驱动“循环”的重要模块。Channel类其实相当于一个文件描述符的保姆!2.2.1 Channel类概述-我在地铁站里吃闸机。
[muduo网络库]-muduo库Poller/EPollpoller解析
本贴用于记录库的学习过程,以下是关于Poller\EPollpoller类的个人理解。Poller\EPollpoller作为三大核心组件之一,主要功能是为eventloop监听事件,并返回待处理的channel。下面是Poller在eventloop中的大概模型:大家都知道Poller是通过子类EPollpoller实现的,但是为什么要怎么设计呢?直接把具体实现在Poller里写出来不就好了吗。
Muduo网络库实现 [四] - Channel模块
具体来说每一个套接字都会对应一个 Channel 对象,用于对它的事件进行管理。可以对于描述符的监控事件在用户态更容易维护,以及触发事件后的操作流程更加的清晰 Channel模块是用于对一个描述符所需要监控的事件以及事件触发之后要执行的回调函数进行管理的
《Muduo网络库:实现Channel通道以及Poller抽象基类》
封装socket地址类型、实现Channel通道、Poller抽象基类、EpollPoller类。理清EventLoop、Channel、Poller三者之间的关系,为实现EventLoop事件循环做准备
Muduo类详解之Channel
同时Channel类还提供了设置该fd的感兴趣事件,以及将该fd及其感兴趣事件注册到事件监听器或从事件监听器上移除,以及保存了该fd的每种事件对应的处理函数。revents_代表事件监听器实际监听到该fd发生的事件类型集合,当事件监听器监听到一个fd发生了什么事件,通过Channel::set_revents()函数来设置revents值。持有⼀个⽂件描述符,正在监听的事件,已经发⽣的事件(由Poller 返回),以及各个事件(读、写、更新、错误)回调函数的 Function 对象。
6170




被折叠的 条评论
为什么被折叠?



