1.muduo安装使用与源码阅读说明

仿腾讯源码学习路线:架构拆解与开源组件复现实战 源码阅读是程序员深挖系统原理、提升架构能力的重要途径。许多开发者通过研究开源项目,如Redis源码、muduo网络库、Spring框架等,来理解高并发系统背后的核心设计。这种学习方式的价值不在于复制代码,而在于掌握大厂系统的分层思维、通信模型与存储策略。从网络通信到数据缓存,从业务工程化到微服务治理,优秀开源项目提供了可复现的架构范本。无论是后端服务、嵌入式终端还是客户端界面,都能从中提炼出可迁移的技术方案。本文以“仿腾讯源码”这一搜索热词为切入点,系统梳理了如何通过拆解开源组件、精读关键模块、动手仿写最小 阅读详情

1.源码阅读说明

  1. 本人是在具有C++基础和Linux系统与网络编程基础的情况下阅读muduo源码,如果对Linux网络编程不熟悉,最好先学习一下Linux网络编程

  2. 阅读时可以参考<muduo网络库使用手册>,这个一搜就能搜到,对muduo整体的框架有讲解,能帮助理解Buffer,TcpConnection等类,可以先读读这个再看源码

  3. 这里写的代码阅读笔记,只是对阅读源码的辅助,对各个类的功能和各函数难理解的地方做一些注释讲解,可以完全按照本人的阅读顺序,从base–>net–>httpserver–>example文件夹顺序阅读,每个文件夹里面的都按照顺序阅读,结合我自身的经验是循序渐进的阅读学习.下面是优快云博客目录,推荐按如下顺序阅读:

2. muduo安装使用

  1. 这里讲一下muduo如何使用,可以先运行一下再看源码,也可以看完源码在来使用…我是看完源码才用的,使用中也对源码整个框架有了更好的理解

1. 下载编译

  1. muduo在github上有开源代码,作者也写的有README介绍如何运行,但是还是有些不理想,这里结合自身经历更详细的说一下如何编译安装

  2. 首先从muduo(github)下载源码,解压

  3. 进入解压的文件夹运行bash文件

    ./build.sh
    
    • 会在上一层目录多个build文件夹,进去后的bin文件夹内都是作者写好的测试例子程序,可以直接运行

2. 使用

  1. 作者的README就是到上面这一步,但是这样只能运行测试作者写好的例子,想自己写代码使用的话,需要继续运行

    ./bulid.sh install
    
    • 这样会在build文件夹内生成一个"release-install-cpp11"文件夹,里面是头文件和静态库,编译的时候就要指定链接库
  2. 可以参考作者陈硕的教程,这里有一个echo.cc服务例子和几种编译方法,我只关注了makefile文件,直接make不行,需要做一些修改

  3. 可以把echo.cc文件放到上面说的"release-install-cpp11"目录下,然后通过下面的命令编译

    g++ echo.cc -I ./include -L ./lib -lmuduo_net -lmuduo_base -lpthread
    
    • 这个本质就是要指定头文件和库文件所在位置,都在本目录下的include和lib文件夹下,如果在其他地方写程序,也需要指定这两个文件夹的目录,也可以放到系统path指定的目录中…
  4. 自己的代码要使用muduo的话,就需要这个include和lib文件夹,我为了方便使用就把这两个文件夹内的内容移动到了/usr/local/include和/usr/local/lib目录下,这样编译的时候就不用指定目录了

  5. 编程方面,主要是写三个回调函数,也就是关注作者所说的三个半事件

    • onMessage() 当消息到来(1)时做什么
    • onConnection() 当连接建立(2)和断开(3)的时候做什么
    • onWriteComplete() 当写完后(第三个半事件)做什么

3. muduo各类总览

  1. 这个实际是摘抄<muduo网络库使用手册>中的部分内容,能帮助快速理解muduo类

1. 内部实现类

  1. Channel
    • 是selectable IO channel,负责注册与响应IO事件,它不拥有file descriptor.它是Acceptor,Connector,EventLoop,TimeQueue,TcpConnection的成员,生命周期由后者控制
  2. Socket
    • 封装一个file descriptor,并在析构的时候关闭fd.它是Acceptor,TcpConnection的成员,生命期由后者控制.EventLoop,TimerQueue也拥有fd,但是不封装为Socket.
  3. SocketsOps
    • 封装各种sockets系统调用
  4. Poller
    • 是PollPoller和EPollPoller的基类,采用"电平触发"的语意.它是EventLoop的成员,生命期由后者控制.
  5. PollPoller,EPollPoller
    • 这两个封装poll(2)和epoll(4)两种IO Multiplexing后端.Poll的存在价值是便于调试,因为poll(2)调用是上下文无关的,用strace(1)很容易知道库的行为是否准确.
  6. Connector
    • 用于发起TCP连接,它是TcpClient的成员,生命期由后者控制.
  7. Acceptor
    • 用于接受TCP连接,它是TcpServer的成员,生命期由后者控制.
  8. TimerQueue
    • 用timerfd实现定时,这有别于传统的设置poll/epoll_wait的等待时长的方法.TimerQueue用std::map来管理Timer,常用操作的复杂度是O(lnN),N为定时器数目.它是EventLoop的成员,生命期由后者控制.
  9. EventLoopThreadPool
    • 用于创建IO线程池,用于把TcpConnection分派到某个EventLoop线程上.它是TcpServer的成员,生命期由后者控制.

2. 公开接口类

  1. Buffer
    • 仿Netty ChannelBuffer的buffer class,数据的读写透过buffer进行.用户代码不需要调用read(2)/write(2),只需要处理收到的数据和准备好要发送的数据.
  2. InetAddress
    • 封装IP地址,muduo目前不能解析域名,只认IP地址
  3. EventLoop
    • 事件循环(反应器Reactor),每个线程只能有一个EventLoop实体,它负责IO和定时器事件的分派.它用eventfd(2)来异步唤醒,者有别于传统的用一对pipe(2)的办法.它用TimerQueue作为计时器管理,用Poller作为IO Multiplexing.
  4. EventLoopThread
    • 启动一个线程,在其中运行EventLoop::loop().
  5. TcpConnection
    • 整个网络库的核心,封装一次TCP连接
  6. TcpClient
    • 用于编写网络客户端,能发起连接,并且有重试功能
  7. TcpServer
    • 用于编写网络服务端,接受客户的连接
  • 在这些类中,TcpConnection的生命期依靠share_ptr管理(即用户和库共同控制),Buffer的生命期由TcpConnection控制.其余类的生命期由用户控制.Buffer和InetAddress具有值语义,可以拷贝;其他class都是对象语义,不可以拷贝.

3. 类图

在这里插入图片描述

  • 白三角表示继承,图中的Poller和PollPoller,EPollPoller的关系
  • 白菱形表示聚合,菱形指向整体,部分能脱离整体存在
  • 黑菱形表示组合,菱形指向整体,部分不能脱离整体存在
  • 实现表示关联,一个类知道另一个类的属性和方法
Claude Code 实战指南:终端 AI 编码智能体的安装、配置与避坑 AI编程助手正在改变开发者的工作方式,从代码补全到自动化重构,智能体(Agent)已成为提升工程效率的关键工具。这类工具的核心原理,是让模型能读写代码、执行命令并理解项目上下文,从而在人工审核下完成批量修改。在工程实践中,合理配置记忆文件与权限边界,能显著提高重构和代码审查的准确度。此类技术广泛应用于跨文件重构、遗留系统升级、自动化测试等场景。Claude Code 作为终端里的编码智能体,正是这一趋势的代表。本文提供一份完整指南,涵盖安装接入(包括Ubuntu/Windows、VS Code以及DeepS 阅读详情

相关推荐

拆解即时通讯系统源码:红包、音视频与高并发架构实践

即时通讯(IM)系统源码的价值不仅在于聊天功能,更在于红包、音视频等高复杂度链路的实现。理解其背后的架构选型与数据一致性设计,是评估和二次开发的关键。在IM系统中,红包作为资金操作需要独立的事务链,常利用Redis与Lua脚本保证高并发下的原子扣减;而视频通话则依赖WebRTC信令与媒体网关调度。这些技术共同构成了IM系统的核心竞争力。本文从常见技术栈讲起,逐步解析群聊红包的并发控制、feed流的数据模型,以及视频通话的部署要点,为工程师评估源码质量与搭建测试环境提供参考。

weixin_30110543的博客 76

muduo C++网络库学习

一、muduo库的安装 1. 安装依赖文件 muduo采用CMake为build system,安装方法如下: 安装cmake: sudo apt-get install cmake muduo依赖于Boost,也很容易安装: 安装boost库 sudo apt-get install libboost-dev libboost-test-dev muduo有三个非必需的依赖库:curl、c-ares DNS、Google Protobuf,如果安装了这三个库,cmake会自动多编译一些示例。安装方

专注于C/C++/Linux领域创作 1902

飞屏投影Server端源码全解析:从网络收流到解码渲染

在实时多媒体传输与网络编程领域,理解视频流从采集到显示的全链路至关重要。其核心原理往往围绕数据流的接收、解码与渲染展开,涉及TCP/UDP协议处理、FFmpeg软解、SDL2图形输出等技术环节。这类技术方案的价值在于,它抽象出统一的网络收流与展示逻辑,能够适配多种终端与硬件平台,广泛应用于大屏互动、无线投屏、嵌入式显示等场景。飞屏投影server端源码正是这样一个综合样本,它完整实现了从手机端推流、服务端拆包组包、H.264/H.265解码到最终画面输出的整个流程。通过剖析该源码中的网络收流粘包处理、解码器

weixin_33146151的博客 260

muduo网络库与服务模型介绍

muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。 muduo github网址:https://github.com/chenshuo/muduo 一、muduo网络库简介 1、特点 (1)线程安全,原生支持多核多线程; (2)不跨平台,只支持Linux; (3)只要支持x86-64,兼顾IA32,也可以运行在ARM上; (4)不支持UDP,只支持TCP (5)不支.

yolo_yyh的博客 3506

Linux 多线程服务端编程 使用muduo C++ 网络库

Linux 多线程服务端编程 使用muduo C++ 网络库

DataGridView 右键菜单复制(公共)

dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {

沁心渃水 2832

c++ muduo网络库源码编译安装

一个基于reactor反应堆模型的多线程C++网络库。muduo网络库是C++语言开发的一个非常优秀的网络库,作者陈硕,muduo网络库在多线程环境下性能非常高,该系列文章会分享一些muduo库源码的知识,包括它的线程池源码,TcpServer源码,还有很多muduo库应用的示例代码等,学习一下作者优秀的C++多线程网络编程设计思想。muduo库源码github仓库地址muduo库是基于boost开发的,所以需要先在Linux平台上安装boost库,安装过程参考我的另一篇博客1.拷贝源码文件。

qq_58158950的博客 661

模电(十四)差分放大电路

目录 差分放大电路 双端输入双端输出 Q点分析 抑制共模信号 放大差模信号 双端输入单端输出 Q点分析 差模信号分析 共模信号分析 单端输入双端输出 单端输入单端输出 四种接法比较 具有恒流源的差分放大电路 差分放大电路的改进 差分放大电路 采用引入支流负反馈,温度补偿来克服零点漂移(温度变化,直流电源波动,元器件老化产生的输入电压为零,输出电压不为零的...

weixin_43674847的博客 2万+

muduo库学习下载链接

muduo库学习下载链接 github地址:https://github.com/chenshuo/muduo 使用muduo库帮助地址:https://github.com/chenshuo/muduo-tutorial muduo源码压缩包:https://pan.baidu.com/s/1miQNh1n2gNZNyd95p3dMUw 提取码:jmor

m0_48643365的博客 992

【技术实践指南】Python解析FactSet Revere供应链数据:构建企业级断裂与重构监测指标

本文提供了一份企业级Python实践指南,详细解析如何利用FactSet Revere供应链数据库,构建供应链断裂与重构监测指标。内容涵盖数据清洗、关系对筛选、时间序列处理及核心指标(断裂、恢复、转移)的工程化实现,旨在帮助数据工程师与分析师搭建自动化、可解释的供应链风险监控系统。

weixin_29051811的博客 932

Node-Red系列教程——NodeRed通过OPC UA读取数据并写入mysql

NodeRed通opcua读取西门子数据并存入mysql

鲸鱼姐的专栏 1万+

GitHub推荐C++项目:基于muduo、protobuf、zookeeper实现RPC框架

完整的RPC过程如下图:远程调用需传递服务对象、函数方法、函数参数,经序列化成字节流后传给提供服务的服务器,服务器接收到数据后反序列化成服务对象、函数方法、函数参数,并发起本地调用,将响应结果序列化成字节流,发送给调用方,调用方接收到后反序列化得到结果,并传给本地调用。//Login函数的参数。

2401_86353562的博客 1317

Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决

介绍 主要解决如下问题 网络图标消失 常用方法配置中出现的网络图标变成灰色没有办法打开 打开网络和Internet闪退 错误提示`网络发现已关闭。网络计算机和设备不可见。请启动网络和共享中心的网络发现。 连不上网,诊断结果为 依赖服务或组无法启动 这个问题大概率通过重装系统不能解决,请大家谨慎测试之后最后选择重装这个路线。 方法1:这一步一定要做(卸载三方软件) 把360安全卫士,软件管家这些东西都卸载掉。 我的问题一开始就是这个软件引起的,可能他检测到我还给台式机配了无线网卡,然后就把有线网络的一些

呆呆象呆呆的博客 3万+

Linux下muduo C++网络库源码编译安装全攻略

多线程网络编程是Linux高并发服务端开发的重要基石,Reactor模式通过事件循环和线程池高效管理海量连接,而C++网络库muduo正是该思想的经典实践。不过,在Linux平台从源码编译muduo并非一路顺畅,cmake配置、boost依赖版本、编译器兼容性等环节都容易踩坑。掌握源码编译不仅能让库运行起来,更能帮助开发者理解库的目录结构和构建原理,为后续二次开发与故障排查打下基础。在实际工程中,无论是构建echo服务示例还是实现自定义RPC框架,提前准备好头文件路径和静态库链接顺序都至关重要。本文从环境检

weixin_34280237的博客 330

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

YOLO11检测中的内存占用分析与优化:讲解如何分析并优化推理时的内存使用

YOLOv11模型内存分析与优化摘要:本文系统分析了YOLOv11目标检测模型的内存使用模式,重点探讨了显存(VRAM)、系统内存(RAM)和共享内存的特性差异。通过PyTorch内置工具和自定义分析器,详细剖析了骨干网络、颈部网络和检测头各组件内存占用规律,指出激活值内存与输入尺寸呈平方级增长关系。文章提供了卷积层内存计算公式,并强调合理规划"工作台"(显存)与"仓库"(内存)间的数据流动是优化关键。最后通过流程图直观展示了YOLOv11推理过程的三类内存使用模式,

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 344

muduo网络库源码编译安装全指南:从环境准备到踩坑排查

C++后端开发中,Reactor模式与事件驱动模型是构建高并发网络服务的核心思想,而muduo作为经典的C++网络库,完美诠释了这些底层机制。掌握源码编译安装过程,是深入理解epoll事件循环、线程池及非阻塞IO的关键一步。通过CMake配置、Boost依赖处理与GCC工具链的协同,开发者能够亲手构建出可用的静态库,并在实际工程中完成代码链接与调试。编译过程中遇到的常见错误、版本兼容性问题及不同Linux发行版的差异,往往比单纯阅读文档更能提升工程实践能力。无论你是初学者还是进阶工程师,从源码构建muduo

weixin_33871366的博客 329

华为OD机试真题 新系统 2026-09-06 Python&JS【仓储货物有序出库】

某仓储中心有一个货物堆放区,货物编号按乱序堆叠存放,只能从顶部取货,管理员需要将货物按编号从小到大取出。

MISAYAONE的博客 116

muduo

它以“简单、高效、易用”著称,是学习Linux C++高性能网络编程的绝佳范本。的源码,不仅对使用它大有裨益,更是学习 Linux 高性能服务器编程思想、C++ 网络编程实践和良好软件设计模式的宝贵资源。每次点菜、上菜、结账,服务员都要等顾客做完一件事才能服务下一个(阻塞)。,先读到 Buffer 的 Writable 空间,如果不够,再读到栈上的临时缓冲区,最后。):由用户设置,在连接建立、收到消息、数据发送完成、连接关闭时被调用。就绪了),服务员就去处理哪个桌子的需求(回调函数)。

2301_80355452的博客 845

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

源码阅读与论文写作:从经典项目到工程实践的高效路径

技术学习绕不开源码阅读与论文写作这两座大山,而真正高效的路径往往始于对经典项目的深度拆解。无论是嵌入式领域的内核源码,还是服务端常见的框架源码,其底层原理都遵循着相似的设计哲学——抽象、分层与复用。理解这些原理,不仅有助于提升工程能力,更能为技术创新提供理论支撑。在实际应用中,从linux内核源码到spring源码,从muduo网络库到freertos内存管理,每一个经典项目都是绝佳的研读样本。然而,源码阅读的价值并不止于读懂,更在于将理解转化为可输出的成果——论文写作正是这样一种高阶输出。它要求我们具备从

weixin_42560991的博客 341

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Claude Code实战指南:从安装配置到Git仓库操作与源码学习

AI编程助手正在重塑开发者的日常工作流,其中以命令行交互为核心的工具因其直接操作项目文件、执行命令和查看Git日志的能力,成为高效处理代码任务的利器。这类工具的原理并不神秘:通过终端连接云端大模型,结合本地项目上下文生成精准的修改建议,大幅降低阅读老旧代码、梳理架构和定位问题的门槛。在工程实践中,合理配置项目说明文件与技能包,能显著提升协作效率;而掌握规范的Git操作,如分支管理、变基冲突解决和远程仓库同步,则是保障代码安全与团队协同的基础。同时,阅读高质量开源项目源码是提升技术能力的重要路径,借助AI工具

weixin_34007020的博客 325

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux C/C++进阶实战:从系统编程到AI与音视频开发

C++作为高性能计算和系统编程的核心语言,其现代特性(如智能指针、移动语义)与内存模型是构建高效、安全软件的基础。理解这些原理,结合Linux系统编程(进程、网络、I/O多路复用)和调试工具链(GDB、Valgrind),是解决复杂工程问题的关键。这种技术组合在需要极致性能与控制的场景中价值显著,例如AI基础设施(AI Infra)中的模型部署与高性能算子开发,以及音视频处理中的实时编解码与流媒体服务。本文聚焦于如何将C++语言能力与系统知识转化为解决AI Infra、后端服务等实际问题的项目实战能力,提供

weixin_30800987的博客 311

C++ 游戏服务器方向需要多少功底?

这篇文章是回答一位知友的提问: 现在大二了马上升大三,就读于一个很垫底的211,专业是计算机相关的,但是对本专业内容不感兴趣,希望能从事c++后端的工作,对游戏比较有兴趣,但又不知道需要哪方面的知识,希望各位能给出一个客观的评价或者批评,帮忙指点,感激不尽。 看了一些书,unp扫了一遍,apue认真的读了一大半,但是觉得只读书不够,就一边看游双的linux高性能服务器编程,一边自己上手实现一个简陋的web服务器。上网看见什么东西就一点一点往里面塞,什么定时器,线程池,智能指针,raii锁之类的。之后准备

左雪菲的专栏 1270

VoltAgent源码审阅:锁顺序死锁、无锁队列误用与工程修复

源码级审阅是验证基础设施工程质量的关键手段,尤其在并发编程领域,锁顺序、队列实现与事件循环的耦合往往决定系统稳定性。通过静态分析结合最小复现,可以定位难以察觉的死锁风险:例如多线程路径下锁顺序反转导致互相等待,或在不恰当场景使用无锁队列引发性能悬崖。理解这些原理,有助于在云边协同、实时数据处理等场景构建健壮的Agent运行时。本文以VoltAgent v0.5.2-rc1为审阅对象,从网络层Buffer、定时器事件循环到多线程任务调度,逐层剖析其工程设计与隐患,并给出可落地的修复优先级清单,为同类基础设施项

weixin_34009794的博客 333

上万套源码合集:从嵌入式到量化,一份长期更新的技术地图

源码阅读是开发者进阶的核心路径之一。面对海量开源项目,如何从嵌入式驱动、后端框架到量化指标等不同领域中高效筛选并精读源码,成为提升技术能力的关键。本文从源码合集的分类逻辑切入,解析Linux内核、STM32、MyBatis、SpringBoot等主流技术栈的学习价值,并分享从环境配置到依赖处理的完整实操方法论。通过三层筛选法、三遍阅读法及问题驱动式排查,帮助读者将代码资源转化为工程能力,而非停留在收藏吃灰阶段。

weixin_34414650的博客 137
上一篇: SIGPIPE信号产生原因
下一篇: 2.muduo学习笔记之base_Timestamp.{h&cc}
PartnerLv
博客等级 码龄10年 338粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值