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实现Reactor模式
在简单介绍epoll api之后,本文使用epoll实现Reactor模型,创建回射服务器
从epoll构建muduo-11 单线程Reactor网络模型成型
mini-muduo v0.10版本,修整代码版本。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.10可切换到此版本,在线浏览此版本到这里。 这个版本的改动不大,主要修改了命名规范问题,借着这个版本重点分析一下muduo里的三个文件描述符。
基于epoll实现reactor模式
在epoll基础上封装成reacotr模式
基于Epoll的Reactor模式
Reactor反应堆模式,也就做分发者模式也叫做通知者模式。它是一种设计模式将就绪事件派发给对应服务器处理程序:其基本理念如下。
基于epoll实现Reactor服务器
创建epoll模型:调用epoll_create,在文件描述符表添加一个描述符,生成对应的文件结构体结构体保存对应生成eventpoll结构体的地址,该结构中有rbr(监视事件红黑树),rdllist(就绪事件队列)等等。添加一个fd到epoll中:调用epoll_ctl,通过epollfd在进程文件描述符表中找到对应的file,然后在对应的文件结构体中的标识符将特定指针强转为eventpoll,访问rbr,增加新结点在树中,并且添加对应的回调函数到对应fd的文件结构体中。
高级IO:selcet\epoll + 反应堆(Reactor)
(一)五种IO模型"就让我是一道微光,能让你拥有灿烂的锋芒"(一)五种IO模型如何理解高级IO?IO=等待 + 数据拷贝高效IO:减少"等待"花费的单位时间,尽可能提高IO效率!(1)阻塞IO阻塞 IO顾名思义:阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待.举个钓鱼的例子,再鱼没咬钩之前,死盯着杆子。一旦鱼咬钩,就立马拉杆。(2)非阻塞IO显然,非阻塞IO就和阻塞IO完全对立。如果内核还未将数据准备好, 系统调用仍然会直接返回。并且返回EWOULDBLOCK错误码。
从epoll构建muduo-13 Reactor + ThreadPool 成型
本版是个里程碑版本,可以通过本版了解多线程是如何通过IO线程读/写网络数据的,在前一个版本v0.12重点介绍了基础知识的前提下,本篇着重分析多线程逻辑里最重要的三个方法EventLoop::runInLoop/EventLoop::queueInLoop/EventLoop::doPendingFunctors。下面逐步介绍本版本修改的细节,三个方法放在最后的EventLoop节。
从epoll构建muduo-8 加入发送缓冲区和接收缓冲区
mini-muduo v0.07版本,这个版本是加入了发送缓冲区和接收缓冲区的初始版本,后续v0.08完善了缓冲区的实现。mini-muduo完整可运行的示例可从github下载,使用命令git checkout v0.07可切换到此版本,在线浏览此版本到这里 1 为什么要有发送缓冲区和接收缓冲区,muduo作者已经在>节中详细介绍过了。建议有条件的同学直接看书。我觉得这部分知识非常重要所以
【Linux网络】从0手写Reactor反应堆(三):代码收尾、连接生命周期管理与多Reactor扩展思路
上一篇我们把Reactor的核心逻辑彻底填实了:ET模式下的非阻塞循环读写、应用层缓冲区解决TCP粘包、IO层/协议层/业务层三层解耦,整个请求从接收、解析到响应的链路已经完整跑通。但框架还剩几块收尾工作没有落地:写事件的动态开关只有调用接口没有底层实现、客户端断开或出错时连接没有真正从反应堆移除、文件描述符资源也没有正确释放。本篇我们先把这些代码细节补完,让单Reactor里的每一条连接,从被accept创建、到数据收发、再到异常/正常断开,形成完整的生命周期闭环;随后汇总所有核心文件的完整代码,方便整体
【C++/Linux实战项目】仿muduo库实现高性能Reactor模式TCP服务器(深度解析)
本文实现了一个基于多Reactor模式的高性能TCP服务器,项目完整实现了TCP服务器的核心功能,包括连接管理、事件监控、数据收发等,可作为网络编程学习的实践案例。
【Linux网络】从0手写Reactor反应堆(一):核心框架搭建——连接抽象与事件派发
学习 Linux 网络编程的朋友们,想必都写过原生 epoll 服务器:把 listen_fd 扔进 epoll,事件循环里等就绪,然后判断是监听套接字就 accept,是普通套接字就 recv/send。写小 demo 还好,一旦业务复杂起来,代码会变得极其臃肿 —— 监听逻辑、读写逻辑、错误处理、缓冲区管理全揉在事件派发里,改一处动全身。这也是为什么工业级网络库几乎都采用 Reactor 模式:它的核心思想就是先描述,再组织。把每一个文件描述符都封装成独立的连接对象,把多路复用、事件派发、IO 处理分层
Muduo---Channel类
epoll_wait拿到fd查表找回调 执行回调(面向过程,有查找开销,逻辑分散)。epoll_wait直接拿到Channel*(面向对象,零查找开销,高内聚)。成员变量解决的问题核心意义防止“边处理事件,边销毁自己”导致的 Use-After-Free作为防御性编程的手段,通过assert(!确保 Channel 析构时的绝对安全性。
深入理解Reactor模式:从select到epoll再到事件循环
对比select poll epoll的不同,深入讲解reactor以及目前实际应用
Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)
从这一篇博文起,我们开始剖析Muduo网络库的源码,主要结合《Linux多线程服务端编程》和网上的一些学习资料! (一)TCP网络编程的本质:三个半事件 1. 连接的建立,包括服务端接受(accept) 新连接和客户端成功发起(connect) 连接。TCP 连接一旦建立,客户端和服务端是平等的,可以各自收发数据。 2. 连接的断开,包括主动断开(close 或shutdown) 和被动断开
(二)什么是Reactor模式
Reactor模式(反应堆模式):这便是libevent的中心思想。在常规的I/O多路复用中采用select和poll、epoll等来实现,而将这些机制封装而成的就是I/O多路复用模式,Reactor就是其中之一。通俗的来讲,它就是通过回调机制实现的。我们只需将事件的接口注册到Reactor上,当事件发生之后,会回调注册的接口。比如你订闹钟明早六点半起床,那么在六点半之前你就可以安心睡觉,到了六点半
Linux学习笔记14—IO多路复用:select/poll/epoll与Reactor模式
来个offer吧(少年祈祷中)
6170




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



