muduo网络库源码解析
李兆龙的博客
Distributed Systems & NoSQL & Linux Kernel / eBPF & Chaos Engineering
展开
-
非阻塞Connect的各种返回值
这里是对各种情况解释比较好的链接ENETUNREACH,ECONNREFUSED ENETUNREACH,ECONNREFUSEDENOTSOCK ENOTSOCKEINTR EINTREADDRINUSE EADDRINUSEEADDRNOTAVAIL EADDRNOTAVAILEACCES EACCESEPERM EPERMEAFNOSUPPORT EAFNOSUPPORTE...原创 2020-02-20 12:19:08 · 962 阅读 · 0 评论 -
muduo网络库源码解析(0) 概述与总结
引言以下九篇文章基本上把muduo的整个工作机制算是完整的展现了.muduo网络库是十几年前由陈硕大神完成一个基于Linux的多线程TCP的网络库,其中对于各个地方处理的细节当今看来对于我们学习此方面的内容仍是一盏闪耀的明灯,但毕竟是十几年前的代码,其中当然也有一些值得商榷的地方,但我想这也许就是学习它的目的所在.这一系列源码解析分九篇文章描述了muduo对于消息的处理与用户的连接,这基本是...原创 2020-02-20 12:12:03 · 765 阅读 · 1 评论 -
muduo网络库源码解析(9):Connector与TcpClient
引言前几篇文章主要对服务端的一系列问题做了分析,其中的一些组件可以Connector与TcpClient中,这两个类是编写服务端的基础,就是干了一件事情而已,即连接.我们先来看看Connector的构造函数.const int Connector::kMaxRetryDelayMs; //最大重连间隔Connector::Connector(EventLoop* loop, const ...原创 2020-02-20 12:08:14 · 497 阅读 · 0 评论 -
muduo网络库源码解析(8):EventLoopThreadPool与EventLoopThread
引言在看muduo源码时我始终有这样一个疑问,即为什么要大量使用回调?这样做使得代码的复杂度大规模提升,且在结构上修改的话这些结构是不必要的.这两个类也许能在一定角度回答这个问题.在第六篇时我们简单介绍过EventLoopThreadPool,这一篇就更详细的分析下这两个类所实现的功能.首先我们来看一下调用EventLoopThreadPool的地方,即TcpServer::start,我们从...原创 2020-02-20 12:07:58 · 581 阅读 · 4 评论 -
muduo网络库源码解析(7):TcpServer与TcpConnection(下)
引言这个题目有一点点不符合文章内容.因为TcpServer其实已经在上一篇文章中说完了,同时上一篇文章中解析了TcpConnection的连接与断开,这一篇解析收发消息.至此TcpConnection也就解析完了.我们直入主题吧.先从收消息开始.收消息的重点当然是handlereadvoid TcpConnection::handleRead(Timestamp receiveTime){...原创 2020-02-20 12:07:43 · 421 阅读 · 1 评论 -
muduo网络库源码解析(6):TcpServer与TcpConnection(上)
引言从这一篇中正式进入muduo的核心部分解析,分两篇进行,这一篇中解析TcpServer这个网络库的枢纽,其完美展示了muduo的事件分发机制,接着介绍TcpConnection这个muduo中最庞大的类中管理Tcp连接与断开的部分.我们最先来看看TcpServer的构造函数,从这里往出扩展.TcpServer::TcpServer(EventLoop* loop, ...原创 2020-02-20 12:07:28 · 617 阅读 · 0 评论 -
muduo网络库源码解析(5):EventLoop,Channel与事件分发机制
引言这一篇分析muduo的事件分发机制,核心类为EventLoop与Channel,我认为理解的重点在于先不想多线程,就把Eventloop和Channel当做一个单线程的组成部分,这样能够更好的理解代码.但是这一章的很多东西并没有办法讲清楚,因为Eventloop的设计过程我觉得是一步一步往里面加功能的,不太可能一次所有的功能都加进去,解析如果一次全都说了也对理解没有帮助.必须得放到后面几篇分...原创 2020-02-20 12:07:12 · 1229 阅读 · 2 评论 -
muduo网络库源码解析(4):TimerQueue定时机制
前言前三篇算是把日志部分讲清楚了,从这篇开始从TimeQueue入手,引入Runinloop.在下一篇或者下下一篇中描述整个muduo的事件分发机制.TimerQueue这个类看上去麻烦,不知所云,实则非常简单,我们就把它看做一个时间轮即可,其实它本身也可以充当时间轮,不过效率比不上时间轮而已,时间轮可以接近O(1),而muduo中的TimeQueue中使用set,插入和取出(二分)均为O(l...原创 2020-02-20 12:06:59 · 817 阅读 · 2 评论 -
muduo网络库源码解析(3):多线程异步日志库(下)
引言前两篇文章分析了muduo日志库的同步部分与异步部分,这篇文章算是对日志部分的一个总结,同时加入我对于muduo日志库的几点修改建议及实现,笔者水平有限,欢迎大家的讨论和提出宝贵的意见!...原创 2020-02-20 12:06:44 · 640 阅读 · 0 评论 -
muduo网络库源码解析(2):多线程异步日志库(中)
引言上篇文章中分析了muduo日志库的基本流程与同步日志,这篇文章重点介绍异步日志部分,毕竟这才是在多线程编程中主流的方法.原创 2020-02-20 12:06:28 · 783 阅读 · 9 评论 -
muduo网络库源码解析(1):多线程异步日志库(上)
前言在看了muduo的源码后,更加明白了大牛的代码究竟是什么样子的,十几年前的代码现在看仍是让人收获满满,遂决定在看过源码后对其做一个总结,这个途径就是博客,一来能更深刻的理解看过的内容,二来源码如果上来就没有章法的读的话是费力不讨好的,所以这一系列文章也是对后来者在阅读过程中一点帮助.这是第一篇文章,我的计划是先把日志说明白,毕竟不管是对一个服务器还是网络库来说日志一定是一个至关重要的内容,...原创 2020-02-20 12:06:07 · 1409 阅读 · 2 评论