muduo源码
文章平均质量分 89
骑猪去兜风..
无
展开
-
muduo网络库学习之EventLoop(一):事件循环类图简介
番外TCP网络编程本质 TCP网络编程最本质是的处理三个半事件连接建立:服务器accept(被动)接受连接,客户端connect(主动)发起连接连接断开:主动断开(close、shutdown),被动断开(read返回0)消息到达:文件描述符可读 消息发送完毕:这算半个。对于低流量的服务,可不必关心这个事件;这里的发送完毕是指数据写入操作系统缓冲区,将由TCP协议栈负责...原创 2018-06-29 15:17:35 · 2779 阅读 · 0 评论 -
muduo中的客户端的编写
总体来说,客户端的代码和服务端的代码大体相同,主要区别是一个是发起连接,一个是接受连接。客户端的代码#include <muduo/net/Channel.h>#include <muduo/net/TcpClient.h>#include <muduo/base/Logging.h>#include <muduo/net/EventLo...原创 2018-09-19 22:45:51 · 1023 阅读 · 1 评论 -
muduo库如何支持多线程
EventLoopThread(IO线程类)EventLoopThreadPool(IO线程池类)IO线程池的功能是开启若干个IO线程,并让这些IO线程处于事件循环的状态图中的每个Reactor都属于一个线程,mainReactor关注的是acceptor,也就是监听套接字相关的事件,subReactor关注的是已连接套接字相关的事件。也就是说,每新到一个连接,就选择一个subReacto...原创 2018-07-26 12:47:01 · 887 阅读 · 0 评论 -
muduo实现的客户端与服务端连接
下面就是利用muduo进行客户端与服务器端的实例:网络编程关注三个半事件:连接建立、连接断开、消息到达这算三个,还有半个是消息发送完毕(之所以是半个,因为对于低流量的服务,通常不需要关注该事件)所以,我们利用muduo编写自己的服务器时,需要有一个XXXServer类,在该类中包含一个TcpServer对象和一个EventLoop对象。这个类需要提供3个成员函数OnConnection、O...原创 2018-07-06 13:02:19 · 1198 阅读 · 0 评论 -
多线程与并发服务器设计
常见并发服务器方案1.iterative(循环式/迭代式)服务器 iterative 只能使用短连接(每处理完一个连接,然后就关闭连接,称为短连接),不能使用长连接,如果使用长连接,意味着write需要转到read,那么整个程序就是一个单线程程序,如果此时有其它线程过来,没有办法接受连接,因为前一个线程还在read->write的循环中。也就是说如果使用长连接的话,这个程序...原创 2018-06-28 21:06:20 · 2784 阅读 · 0 评论 -
muduo基础库
muduo是一个高质量的Reactor网络库,采用one loop per thread + thread pool架构实现,代码简洁,逻辑清晰,是学习网络编程的很好的典范。为什么需要网络库使用Sockets API进行网络编程是一件简单地技术,但是高级语言的Sockets库并没有对Sockets API提供更高层次的封装,直接用它编写网络程序很容易掉到陷阱里,因此需要网络库来降低开发难度...原创 2018-06-28 18:10:40 · 2756 阅读 · 0 评论 -
Buffer类的设计
应用层缓冲区Buffer设计muduo的I/O模型是I/O复用,并且文件描述符设置为非阻塞模式,因为如果使用阻塞模式,I/O线程就有可能阻塞在read、write这些系统调用之上,这样一来,即使其它描述符的IO事件到来,IO线程也不能立刻去处理,也就不能最大程度的使用IO线程。为什么TcpConnection必须要有output buffer?考虑一个常见场景:程序想通过 TC...原创 2018-07-03 20:10:51 · 1153 阅读 · 0 评论 -
muduo中TcpServer、TcpConnection执行过程
muduo中的Acceptor类的主要功能是socket、bind、listen,Acceptor用于accept接受TCP连接一般来说,在上层应用程序中,我们不直接使用Acceptor,而是把它作为TcpServer的成员TcpServer还包含了一个TcpConnection列表这是一个已连接列表。TcpConnection与Acceptor类似,有两个重要的数据成员,Socket与...原创 2018-07-03 14:59:40 · 712 阅读 · 0 评论 -
muduo库中的异步调用
线程间的等待通知pipesocketpaireventfd条件变量前三个都有文件描述符,都可以方便的利用I/O复用来管理,而条件变量没有#include <sys/eventfd.h>int eventfd(unsigned int initval, int flags);mduo库的线程唤醒利用的eventfd,eventfd 是一个比 pipe 更高效的线...原创 2018-07-02 15:37:42 · 956 阅读 · 1 评论 -
定时器
muduo的定时器由三个类实现,TimerId、Timer、TimerQueue,用户只能看到第一个类,其它两个都是内部实现细节TimerQueue的接口很简单,只有两个函数addTimer和cancel我们实际上在使用定时器的时候,并没有直接调用addTimer和cancel,而是调用EventLoop中的下列函数runAt 在某个时刻运行定时器runAfter ...原创 2018-07-02 11:12:55 · 372 阅读 · 0 评论