E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Muduo源码
muduo源码
分析:TcpServer类
上篇博文学习了Acceptorclass的实现,它仅仅是对Channel和Socket的简单封装,对使用者来说简单易用。这得益于底层架构Reactor。接下来,开始学习muduo对于建立连接的处理。这属于muduo提到的三个半事件中的第一个。可以想一下,TcpServerclass应该也是对Acceptor,Poller的封装。连接处理过程首先TcpServer通过Acceptor向Poller注
amoscykl
·
2020-08-14 16:59
moduo网络库
muduo源码分析
muduo源码
分析:EventLoop类 (核心)
4.EventLoop类的实现EventLoop类实现了reactor的基本模式,它的数据定义如下:voidabortNotInLoopThread();//不在主I/O线程voidhandleRead();//wakedup//将事件通知描述符里的内容读走,以便让其继续检测事件通知voiddoPendingFunctors();//执行转交给I/O的任务voidprintActiveChanne
amoscykl
·
2020-08-14 16:27
moduo网络库
muduo源码分析
Muduo源码
阅读
最近简单读了下muduo的源码,本文对其主要实现/结构简单总结下。muduo的主要源码位于net文件夹下,base文件夹是一些基础代码,不影响理解网络部分的实现。muduo主要类包括:EventLoopChannelPollerTcpConnectionTcpClientTcpServerConnectorAcceptorEventLoopThreadEventLoopThreadPool其中,P
Smith先生
·
2020-08-14 16:12
muduo源码
分析——EventLoop
先简单说一下,因为我参考的是flamingo的代码,会和muduo有一点点出入,但是基本是差不多,因为前者是基于后者开发的,可能有一点点改动。EventLoop是muduo里比较核心的类吧,因为它是实现Reactor模式的核心,什么是Reactor模式,其实很多文章和书籍都有讲,我也打算抽空写一篇博客,来总结下自己的心得,至少现在没有总结,哈哈~~。其实如果认真读一下EventLoop里的Loop
不安的前方
·
2020-08-14 15:21
c++网络编程
muduo源码
分析——Channel
本文简单分析muduo的Channel类,我在学习muduo的时候,因为一开始看的很晕,后来找了很多文章来学习,这个Channel有很多种叫法“事件分发器”,“I/O选择器”等,但我还是喜欢叫它通道,为什么呢,因为,当I/O事件发生的时候,最终会回调到Channel的回调函数中,所以我更喜欢把它当作通道,当然这也是它的中文翻译。每一个Channel都对应唯一的EventLoop,也就是一个I/O线
不安的前方
·
2020-08-14 15:49
c++网络编程
muduo源码
分析——TcpConnection
muduo中的TcpConnection算是整个框架中的大头吧,因为每个客户端连接对应一个Channel和一个TcpConnection,而之前已经说了,Channel只是一个通道,那么对于客户端连接的各种处理,基本都是在TcpConnection上完成的了。这个类的cpp文件算是muduo里比较长的了,有400+行。注意我参考的代码时flamingo的代码,是基于muduo,或者会有些出入。Tc
不安的前方
·
2020-08-14 15:49
c++网络编程
muduo源码
分析——EventLoopThreadPool和EventLoopThread
现在开始写EventLoop相关的类,我决定先写EventLoopThreadPool。因为从拥有的关系上来看,TcpServer拥有一个EventLoopThreadPool,然后EventLoopThreadPool拥有若干个EventLoopThread(由TcpServer初始化时决定)。至于是不是直接拥有EventLoop,我觉得吧,可以说拥有,也不好说,因为它并没有去操作这些Event
不安的前方
·
2020-08-14 15:49
c++网络编程
muduo
网络编程
muduo源码
分析——TcpServer和Acceptor
这篇文章用于分析muduo的TcpServer类和Acceptor类,原本打算将TcpConnection也放到这里一起聊的,但是那个太多啦,一篇文章太长会让人读的很不舒服把。当然我用的代码是其他大神开发的flamingo的源码,这是一个基于muduo开发的即时聊天服务器具体的地址https://blog.csdn.net/analogous_love/article/details/694815
不安的前方
·
2020-08-14 15:49
c++网络编程
muduo源码
分析——整体架构
最近在学习网络编程,从flamingo这个服务器开始,当然这个服务器也是基于muduo开发的,所以也算是在研究muduo吧。以前也有记录的习惯,在ipages上或者写在本子上,不过还是记录在博客上吧,一来可以分享自己的心得,二来备查也方便,再者有任何的理解偏差,也会有网友指正吧。 之前也看过不少muduo的分析,这次决定按照自己的理解来写博客,或许会有偏差,希望大家能帮我指出来,谢谢! 先从整体
不安的前方
·
2020-08-14 15:14
c++网络编程
muduo
网络编程
muduo源码
分析--详解muduo多线程模型
6.3非阻塞网络编程应该用边沿触发(ET)还是电平触发(LT)?如果是电平触发,那么什么时候关注POLLOUT事件?会不会造成busy-loop?如果是边沿触发,如果和防止漏读造成的饥饿?epoll一定比poll快么?6.4在finger的测试程序中,没有设置onConnection这个函数,就可以连接?6.6详解muduo多线程模型方案0:accept+read/write一次服务一个客户这个不
鱼思故渊
·
2020-08-11 01:05
muduo源码分析
muduo源码分析
muduo源码
学习(2):异步日志——异步日志的实现
目录什么是异步日志异步日志的实现前端与后端前端与后端的交互资源回收后端与日志文件滚动日志自动flush缓冲区开启异步日志功能总结在前文中分析了日志消息的存储和输出,不过并没有涉及到异步日志,下面就来分析一下异步日志是如何实现的。什么是异步日志在默认的情况下,日志消息都是直接打印到终端屏幕上,但是实际应用中,日志消息都应该写到本地文件,方便记录以及查询。最简单的方式就是每产生一条日志消息,都将其写到
HerofH_
·
2020-08-09 10:46
muduo
muduo源码
学习(1):异步日志——日志消息的存储及输出
目录前言日志存储的实现日志输出的实现总结前言muduo中的日志,是诊断日志。用于将代码运行时的重要信息进行保存,方便故障诊断和追踪。日志一般有两种,一种是同步日志,一种是异步日志,同步日志就是当需要写出一条日志信息的时候,只有等到这条日志消息完全写出之后才能执行后续的程序,可见,这种方式的日志的问题就在于程序可能会阻塞在磁盘写入操作上;而另一种异步日志则不会,异步日志的思路是需要写日志消息的时候只
HerofH_
·
2020-08-09 10:15
muduo
muduo源码
分析之Buffer设计
好久没有看muduo了,最近看Nginx看的有点醉,换换口味。(一)阻塞与非阻塞I/O总结1、对于read调用,如果接收缓冲区中有20字节,请求读100个字节,就会返回20;对于write调用,如果请求写100个字节,而发送缓冲区中只有20个字节的空闲位置,那么write会阻塞,直到把100个字节全部交给发送缓冲区才返回。对于非阻塞I/O来说,以write为例,假设要保证将应用程序的100个字节全
NearXDU
·
2020-08-03 09:28
muduo和多线程学习
C++多线程
muduo源码
分析(一)
muduo是个基于现代C++高效的高并发网络库,他依赖boost库,由陈硕大神编写,更多详情介绍,请看点击打开链接muduo代码结构比较清晰易懂,各个细节处理的非常完美,是一个非常值得学习的开源库。基于他是个网络库,开篇我剖析他的网络相关部分的结果,各个类的继承,调用关系。网络服务器要处理的对象无外乎,监听者TcpServer,连接接收者Acceptor,连接者TcpConnection等等主体对
Shonm
·
2020-07-30 07:56
linux网络编程
muduo
muduo
源码分析
muduo源码
学习笔记(1)
前言:对于muduo库,我觉得,光Linux多线程上提到的一些实现,还是不够的,在base/里面,还有/net里面提供了很多不错的实现,值得去学习,暑假算是看看muduo的百分之八十的源码,并对其进行了一次实现,(剩下的在最近总结的时候,也会开始看看,并实现一遍),对于muduo库,简单谈谈自己对其实现的理解。用RAII管理你的锁PosixThread内定义的一系列的mutex函数,但是是基于C语
梦花火
·
2020-07-11 08:41
C++
Unix网络编程
Muduo
VS2017调试muduo网络库
VS2017调试muduo网络库准备工作下载
muduo源码
配置linux环境VS打开工程开始调试待续准备工作下载
muduo源码
muduo的github地址:https://github.com/chenshuo
tranfirm
·
2020-07-08 07:51
muduo源码
分析--数据发送
暂且已经明白在non-blocking+IOmultiplexing网络编程模型中应用层的buffer是必须的这个问题,看数据是怎么被发送的:对于应用程序而言,它只管生成数据,它不应该去关心到底数据是一次性发送还是分成几次发送,这些应该由网络库操心,程序只要调用TcpConnection::send()就行了,网络库会负责到底。网络库应该接管这剩余的20KB数据,把它保存在该TCPconnecti
鱼思故渊
·
2020-07-06 11:06
muduo源码分析
muduo源码分析
【
muduo源码
分析】Buffer类的设计
目录1、muduo的IO模型2、为什么non-blocking网络编程中应用层buffer是必须的?2.1TcpConnection必须要有outputbuffer2.2TcpConnection必须要有inputbuffer3、MuduoBuffer的数据结构3.1muduobuffer类设计3.2核心函数分析4、参考1、muduo的IO模型Unix/Linux上常见的五种IO模型:阻塞(blo
good-destiny
·
2020-07-05 15:51
开源源码分析
linux-muduo线程通信eventfd
查看内核版本可以用命令uname-r在看
muduo源码
时,项目中使用eventfd机制实现线程间的唤醒(通知)。觉得效率比较高,所以拿来学习下。其也可以实现父子进程间的通信。
扎扎实实写代码
·
2020-07-05 04:32
linux
muduo源码分析
muduo源码
分析:reactor模型封装
图中FileDescriptor、socket都不是类EventLoop:loop--》poller::loop--》pollPoller::loop或者epollpoller::poll,循环等待io事件发生,发生后Eventloop得到activeChannels_活动通道(保存了发生的事件与回调处理函数),并调用该事件的回调处理函数(活动通道channel中注册的回调处理函数,Eventlo
le119126
·
2020-07-04 21:36
muduo
c++
muduo源码
分析--EventLoop 类的实现
首先看EventLoop的具体实现,因为继承了boost::noncopyable。所以这个类是不可拷贝的。从设计muduo的理念来看,oneloopperthread顾名思义每个线程只能有一个EventLoop对象,因此EventLoop的构造函数就会检查当前线程是否已经创建了其他EventLoop对象,遇到错误就终止程序(LOG_FATAL).EventLoop的构造函数会记住本对象所属的线程
鱼思故渊
·
2020-06-30 10:03
muduo源码分析
muduo源码分析
muduo源码
分析--EventLoopThreadPool类
这个貌似是个池,池里全是EventLoopThread。貌似很强大这个类对外的接口也很简单一个构造函数,需要传递的是EventLoop一个设置个数的函数setThreadNum,这个函数好像决定了开启几个EventLoopThread一个start从感觉上来看这个函数是按照numThreads_的数目来开启线程的,EventLoopThreadPool中有一个向量存放着E3ventLoopThre
鱼思故渊
·
2020-06-30 10:03
muduo源码分析
muduo源码分析
各种碎片知识点
服务器开发:负载均衡之加权轮询算法负载均衡的那些算法们秒杀多线程面试题系列C++:C++11右值引用和move语义智力题n*n匹马和n赛道,求前k名问题muduo库
muduo源码
剖析GDB文章目录:【软件开发底层知识修炼
RaKiRaKiRa
·
2020-06-22 04:44
各种碎片知识
海边拾贝-F-第三方项目
第三方网站,不定期更新:陈浩个人博客:https://coolshell.cn/阮一峰个人博客:http://www.ruanyifeng.com/blog/2015/02/make.html陈硕的
muduo
He_LiangLiang
·
2019-11-12 19:00
muduo源码
阅读(四):Buffer的设计
Buffer设计muduo的图示:buffer的必要性muduo的IO模型采用的是阻塞式的,因此线程只能阻塞在seletc/poll/epoll_wait当中,而不能阻塞的write/read函数中,这么一来,应用层的缓冲是必须的。每一个TCPsocket都要配备一个inputbuffer和一个outputbuffer。具体场景举例outputbuffer的必要性目的:应用程序要发送100KB数据
Ideal Dragon
·
2019-06-24 21:10
muduo
Muduo源码
分析一: Poller类 + EpollPoller类详解
前言最近开始看陈硕大佬的muduo,在这里记下所学到的知识叭.第一次写关于阅读源代码的博客,可能更多的是通过注释的方式来解释作者的思路,如果有任何的疑问或意见,欢迎评论.正文Poller介绍eventloop类中有一个成员叫做poller_,这个poller_负责着所有的IO事件,在整个eventloop中起到了决定性的作用.std::unique_ptrpoller_;//eventloop.h
ciaiy
·
2019-06-02 19:01
Muduo源码
muduo源码
分析:Channel类 (事件分发器)
事件分发类Channel事件分发器Channel的数据成员如下://定义事件类型变量staticconstintkNoneEvent;//无事件staticconstintkReadEvent;//可读事件staticconstintkWriteEvent;//可写事件EventLoop*loop_;//channel所属的loopconstintfd_;//channel负责的文件描述符inte
amoscykl
·
2018-10-31 01:30
moduo网络库
muduo源码分析
muduo源码
分析之Acceptor
ClassAcceptor:用于accept一个TCP连接,并通过回调函数通知使用者。accept接受成功后通知TCP连接的使用者,Acceptor主要是供TcpServer使用的,其生命期由后者控制,一个Acceptor相当于持有服务端的一个socket描述符,该socket可以accept多个Tcp客户端连接。Acceptor在构造时候会创建一个socket描述符--acceptSocket_
Cassie_Yan
·
2017-07-22 20:47
muduo源码分析
muduo源码
分析之EventLoop
Eventloop事件循环:反应器(reactor):负责IO和定时器事件的分派。Reator总结性:(Eventloop,Poller,Channel,Timer)一个事件循环对应一个IO线程,IO线程执行EventLoop事件主循环,该主循环loop调用IO复用器poller监听事件集合,并将就绪事件通过事件分发器Channel执行相应的事件回调。1.ClassChannel:事件分发器,主要
Cassie_Yan
·
2017-07-21 16:53
muduo源码分析
muduo源码
分析--线程池的实现
muduo线程池主要有3个类的实现:EventLoop,EventLoopThreadPool,EventLoopThread,和Thread.1.Thread为对一个线程的封装:classThread:boost::noncopyable{public:typedefboost::functionThreadFunc;//创建线程时,传递的函数explicitThread(constThread
扎扎实实写代码
·
2017-04-25 10:43
muduo源码分析
muduo源码
分析之事件处理器-Channel
前面两篇对Acceptor和TcpConnection的分析中,我们知道他们最终都是通过Channel和Eventpool简历连接,而且真正的事件处理函数也都是封装在Channel类中的。所以这里我把Channel看成事件处理器。 除了事件处理函数之外,Channel也是必须将可能产生事件的文件描述符封装在其中的。这里的文件描述符可以是filedescriptor,可以是socket,还可以
gswen
·
2017-02-24 11:54
服务器端编程
muduo源码分析
muduo网络库源码学习————互斥锁
muduo源码
的互斥锁源码位于muduo/base,Mutex.h,进行了两个类的封装,在实际的使用中更常使用MutexLockGuard类,因为该类可以在析构函数中自动解锁,避免了某些情况忘记解锁。
缱绻的西格玛
·
2015-08-29 11:47
muduo库源码学习
Muduo源码
阅读
最近简单读了下muduo的源码,本文对其主要实现/结构简单总结下。muduo的主要源码位于net文件夹下,base文件夹是一些基础代码,不影响理解网络部分的实现。muduo主要类包括:EventLoopChannelPollerTcpConnectionTcpClientTcpServerConnectorAcceptorEventLoopThreadEventLoopThreadPool其中,P
皮皮猪头
·
2015-08-26 20:55
c++
Muduo源码
阅读
最近简单读了下muduo的源码,本文对其主要实现/结构简单总结下。muduo的主要源码位于net文件夹下,base文件夹是一些基础代码,不影响理解网络部分的实现。muduo主要类包括:EventLoopChannelPollerTcpConnectionTcpClientTcpServerConnectorAcceptorEventLoopThreadEventLoopThreadPool其中,P
cyblueboy83
·
2015-08-26 20:00
Muduo源码
阅读
Muduo源码
阅读最近简单读了下muduo的源码,本文对其主要实现/结构简单总结下。muduo的主要源码位于net文件夹下,base文件夹是一些基础代码,不影响理解网络部分的实现。
loop_in_codes
·
2014-05-04 18:00
muduo源码
分析--连接的断开
在Tcp中断开连接比创建连接更加困难 真正执行断开连接的时候是从在channel中的handleEvent函数,在Channel中并没有handleRead、handleWrite、handleClose函数出里的实现,都是借助注册的回调来进行的。 在某一个channel上有事件到达时,执行相应的操作,更具事件类型执行相应的操作这个步骤是在handleEvent函数中进行的。在chan
yusiguyuan
·
2014-03-31 17:00
C++
网络编程
muduo源码
分析--EventLoop 类的实现
首先看EventLoop的具体实现,因为继承了boost::noncopyable。所以这个类是不可拷贝的。 从设计muduo的理念来看,oneloopperthread顾名思义每个线程只能有一个EventLoop对象,因此EventLoop的构造函数就会检查当前线程是否已经创建了其他EventLoop对象,遇到错误就终止程序(LOG_FATAL).EventLoop的构造函数会记住本对象所属的
yusiguyuan
·
2014-03-31 13:00
C++
网络编程
muduo源码
分析--buffer中的线程安全
在栈上准备了一个65536字节的extrabuf(这个空间是在readFd函数内部定义的,说以说是内部栈空间,在这个函数返回以后这个栈空间就会消失,属于临时变量),然后利用readv(0来读取数据,iovec有两块,第一块指向MuuodBuffer中的writable字节,另一快指向栈上extrabuf。这样如果读入的数据不多,那么全部都读到Buffer中去了;如果长度超过Buffer的writa
yusiguyuan
·
2014-03-29 10:00
C++
线程
网络编程
muduo源码
分析--数据发送
暂且已经明白在non-blocking+IOmultiplexing网络编程模型中应用层的buffer是必须的这个问题,看数据是怎么被发送的: 对于应用程序而言,它只管生成数据,它不应该去关心到底数据是一次性发送还是分成几次发送,这些应该由网络库操心,程序只要调用TcpConnection::send()就行了,网络库会负责到底。网络库应该接管这剩余的20KB数据,把它保存在该TCPconn
yusiguyuan
·
2014-03-28 16:00
C++
线程
网络编程
muduo源码
分析--数据在muduo中的旅程
在实例化一个EvenLoop之后,就会有两个socketfd(这两个套接字分别归属于两个Channel中,一个是异步唤醒的wakeFd,一个timequeue初始化的fd)被添加到监听队列中 数据发送的流程: 数据的发送主要靠异步唤醒,当主IO线程接受到一个新的连接后,在TcpServer中实例化一个TcpConnection,然后这个新的连接被挂载到某个线程池(EventLo
yusiguyuan
·
2014-03-28 14:00
C++
线程
服务器
网络编程
muduo源码
分析--TcpServer
从TcpServer分析,结果又回到了TcpServer来,但是这次是有目的而来,这次是分析在TcpServer类中如何使用EventLoopThreadPool。 原来我们再使用TcpServer的时候,除了自己再次封装外,还在主函数中自己实例化一个EventLoop,这个EventLoop是用来初始化TcpServer中的EvetnLoopThreadPool而存在的,就是作为Event
yusiguyuan
·
2014-03-27 22:00
C++
源码
线程
网络编程
muduo源码
分析--EventLoopThreadPool类
这个貌似是个池,池里全是EventLoopThread。貌似很强大 这个类对外的接口也很简单 一个构造函数,需要传递的是EventLoop 一个设置个数的函数setThreadNum,这个函数好像决定了开启几个EventLoopThread 一个start 从感觉上来看这个函数是按照numThreads_的数目来开启线程的,EventLoopThreadPool中有一个向
yusiguyuan
·
2014-03-27 15:00
C++
线程
类
网络编程
muduo源码
分析---EventLoopThread
这个类只有两个对外接口的函数,一个构造函数,一个开始Loop的函数类的内部成员: 一个Loop指针loop_(说明内部并没有实例化EventLoop) 一个线程 thread_ 一个锁 Mutex 一个条件变量cond_ 一个初始化回调callback_EventLoopThread初始化传递的是函数回调,同时开启一个线程,线程函数运行的就是实例化一个EventL
yusiguyuan
·
2014-03-27 14:00
C++
线程
网络编程
muduo源码
分析---EventLoop类
现在暂时记住TcpConnection是TcpServer中Acceptor关注的监听套接字上accept新连接后被初始化的一个对象,接下来分析下EventLoop 这个东西才是真正驱动库的核心,是别的类(EpollPollerAcceptor)帮助他完成了库的功能,看看内部是怎么实现的。EventLoop: 这个类中最重要的成员就是poller_,这个成员调用epoll_wait监听
yusiguyuan
·
2014-03-27 14:00
C++
线程
网络编程
muduo源码
分析--事件如何被关注的 EpollPoller Channel TcpServer
首先看TcpServer: 在这里肯定是有socketfd的,不然这个监听套接字是怎么被关注的呢!这样的操作时通过Accept来处理的Acceptor: 在这个类就是提供给TcpServer让其监听的,类中有Channel,也有一个Socket,有一个事件handleRead(),这个函数肯定是提供给Channel的,等到Acceptor中的socketfd有事件时,肯定是可读事件,调
yusiguyuan
·
2014-03-26 19:00
C++
c
线程
muduo源码
分析--事件回调层次是怎么传递的Tcpserver Channel TcpConnection
muduo库中的源码并不是很多,但是回调的处理非常巧妙,这里从事件激活(某个套接字上可读/可写)以后这个层次看回调怎么被调用的。首先从最大的EventLoop说起: EventLoop中拥有事件链表(每一个元素都是Channel),在loop函数中调用epoll_wait系统调用的时候,将EpollPollr中EventList,将这个链表中激活事件添加到EventLoop中的activeC
yusiguyuan
·
2014-03-26 19:00
C++
线程
网络编程
muduo源码
分析--详解muduo多线程模型
6.3 非阻塞网络编程应该用边沿触发(ET)还是电平触发(LT)?如果是电平触发,那么什么时候关注POLLOUT事件?会不会造成busy-loop?如果是边沿触发,如果和防止漏读造成的饥饿?epoll一定比poll快么?6.4 在finger的测试程序中,没有设置onConnection这个函数,就可以连接?6.6详解muduo多线程模型 方案0:accept+read/write 一
yusiguyuan
·
2014-03-26 11:00
C++
c
线程
网络编程
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他