Muduo源码阅读总结
对Muduo源码阅读及总结梳理。
奔跑的哇牛
这个作者很懒,什么都没留下…
展开
-
Mudo分析及总结(八)TcpCliet和Connector
一、上下文类关系图Tcp的上下文类关系图如上所示。TcpClient,相对于TcpServer的,作为一个客户端,TcpClient具备TcpConnection断开之后重连的功能。EventLoop,IO处理线程。Connector,负责客户端的发起连接任务,连接建立好之后就和Connector没关系了。TcoConnection,当Connector连接上服务端之后,就将连接So...原创 2019-08-10 12:31:33 · 683 阅读 · 0 评论 -
Mudu分析及总结(七)TcpServer
TcpServer class的功能是管理accept(2)获得的TcpConnection。TcpServer是供用户直接使用的,生命期由用户控制。一、上下文类关系图Acceptor,供TcpServer内部使用,用于获得新连接的fd。EventLoop,用户最开始初始化的Loop程序。TcpConnection,TcpServer对每一个新来的连接都会创建一个TcpConnecti...原创 2019-07-24 23:40:38 · 551 阅读 · 0 评论 -
Muduo分析及总结(六)TcpConnection
一、类关系图首先看TcpConnection在整个Muduo结构中的关系,如下图图1TcpConnection是整个网络库的核心,封装一次Tcp连接,注意它不能发起连接。TcpServer和TcpClient都用到了TcpConnection。二、源码分析TcpConnection.h在这里插入代码片三、关键点总结四、发送接收数据流程...原创 2019-07-14 12:09:34 · 1376 阅读 · 1 评论 -
Muduo分析及总结(五) EventLoop
一、EventLoop反应器,每个线程一个。用法 muduo::InetAddress listenAddr(9981); muduo::EventLoop loop; muduo::TcpServer server(&loop, listenAddr); server.setConnectionCallback(onConnection); server.setM...原创 2019-06-29 11:54:15 · 1022 阅读 · 3 评论 -
Muduo分析及总结(四)应用层Buffer
一、应用层为什么需要Buffer非阻塞IO的核心思想是避免阻塞在read()或write()或其它IO系统调用上,这样可以最大最大限度的复用thread-of-control,让一个线程服务于多个socket连接。IO线程只能阻塞在IO Multiplexing函数上,如select/poll/epoll_wait。这样一来,应用层的缓存是必须的。其实任何一个生产者消费者模型都会涉及到缓存问题...原创 2019-06-09 17:29:03 · 1017 阅读 · 0 评论 -
Mudu分析及总结(三)Poller、PollPoller
Poller是基类,PollPoller和EPollPoller是子类,本文只介绍Poller和PollPoller。Poller操作Channel对象,但是不拥有Channel对象。PollPoller是基于poll实现,EPollPoller是基于epoll实现。一、类关系图二、工作时序图三、poll方法基本概念1、poll()int poll (struct pollf...原创 2019-05-27 22:36:30 · 1422 阅读 · 0 评论 -
Muduo分析及总结(二)Channel
Channel类每个Channel对象自始至终只属于一个EventLoop,因此每个Channel对象都只属于某一个IO线程。 每个Channel对象自始至终只负责一个文件描述符(fd)的IO事件分发,但它并不拥有这个fd,也不会在析构的时候关闭这个fd。 Muduo用户一般不直接使用Channel,而会使用更上层的封装,如TcpConnection。 Channel的生命期由其owne...原创 2019-05-22 23:04:38 · 2093 阅读 · 0 评论 -
Muduo分析及总结(一)定时器(TimerQueue、TimerId、Timer)
类关系图TimerId :表示一个定时器的整体,有定时器和序列号。Timer:就是一个定时器的封装。TimerQueue:定时器的处理流程封装。时序图定时器的使用TimeQueue被封装在EventLoop中,定时器的使用要通过EventLoop/在时间戳为time的时间执行,0.0表示一次性不重复TimerId EventLoop::runAt(const Timestamp...原创 2019-05-22 23:03:13 · 1877 阅读 · 2 评论