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网络库学习
总结:基本架构及流程分析
muduo网络库学习
:基本架构及流程分析基本架构BasicReactorMutipleReactor+ThreadPoolmuduo库的基本使用基本结构介绍EventLoop类Poller类Channel
moumde
·
2023-11-10 03:11
epoll
网络
muduo
c++
muduo网络库学习
(1)
muduo网络库学习
(1)文章目录
muduo网络库学习
(1)前言一、muduo是什么?二、代码结构1.base库2.net库3.附属库二、网络库结构总结前言本章节主要介绍muduo网络库的整体架构!
躺又躺不平卷又卷不动
·
2022-12-02 22:04
C++后端
网络
学习
muduo网络库学习
笔记(三)TimerQueue定时器队列
目录
muduo网络库学习
笔记(三)TimerQueue定时器队列Linux中的时间函数timerfd简单使用介绍timerfd示例muduo中对timerfd的封装TimerQueue的结构.TimerTimer
weixin_30648963
·
2020-08-16 15:10
muduo网络库学习
(三)定时器TimerQueue的设计
Linux下用于获取当前时间的函数有time(2)/time_t(秒)ftime(3)/structtimeb(毫秒)gettimeofday(2)/structtimeval(微秒)clock_gettime(2)/structtimespec(纳秒)定时函数,用于让程序等待一段时间或安排计划任务sleep(3)alarm(2)usleep(3)nanosleep(2)clock_nanosle
一个程序渣渣的小后院
·
2020-08-16 14:21
muduo源码学习
muduo网络库源码分析
muduo网络库学习
之EventLoop(一):事件循环类图简介和muduo 定时器TimeQueue
1、EventLoop、Channel、Poller等类图如下:黑色菱形:组合;白色菱形:聚合;白色三角形:继承;实线:关联;Channel是selectableIOchannel,负责注册与响应IO事件,它不拥有filedescriptor。Channel是Acceptor、Connector、EventLoop、TimerQueue、TcpConnection的成员。一个EventLoop对象
s1mba
·
2020-08-16 11:13
muduo网络库学习
muduo网络库学习
笔记(15):关于使用stdio和iostream的讨论
C/C++程序中需要执行输入/输出时,我们一般会用到stdio或iostream。stdio指C语言的scanf/printf系列格式化输入输出函数,iostream指C++语言的cin/cout输入输出对象等。但是,在真实的项目中很少用到iostream(muduo网络库也不例外),本篇就对二者的优、缺点进行一个小结(主要考虑x86Linux平台,不考虑跨平台的可移植性,但是要考虑32-bit和
li27z
·
2020-08-16 11:59
muduo
C/C++
muduo网络库学习
之Timestamp类、AtomicIntegerT 类封装中的知识点
一、Timestamp类封装classTimestamp:publicmuduo::copyable,publicboost::less_than_comparable类图如下:值语义:可以拷贝,拷贝之后,与原对象脱离关系对象语义:要么是不能拷贝;要么可以拷贝,拷贝之后与原对象仍然存在一定的关系,比如共享底层资源两者之间的关系参见这里。1、muduo::copyable空基类,标识类,值类型2、l
s1mba
·
2020-08-16 10:43
muduo网络库学习
muduo网络库学习
笔记(1):Timestamp类
时间戳一般用来唯一地标识某一刻的时间,通常是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。muduo网络库对时间戳Timestamp类也进行了封装。Timestamp类类图:由类图可知,Timestamp类的参数有一个常量kMicroSecondsPerSecond表示每秒所对应的微秒数,成员变量microSecond
li27z
·
2020-08-16 10:38
muduo
muduo网络库学习
之EventLoop(一):事件循环类图简介
番外TCP网络编程本质TCP网络编程最本质是的处理三个半事件连接建立:服务器accept(被动)接受连接,客户端connect(主动)发起连接连接断开:主动断开(close、shutdown),被动断开(read返回0)消息到达:文件描述符可读消息发送完毕:这算半个。对于低流量的服务,可不必关心这个事件;这里的发送完毕是指数据写入操作系统缓冲区,将由TCP协议栈负责数据的发送与重传,不代表对方已经
哆啦尼可夫
·
2020-08-14 22:28
muduo源码
muduo网络库学习
笔记(五) 链接器Connector与监听器Acceptor
目录
muduo网络库学习
笔记(五)链接器Connector与监听器AcceptorConnector系统函数connect处理非阻塞connect的步骤:Connetor时序图Acceptor系统函数acceptSocket
335046781
·
2020-08-14 20:13
muduo网络库学习
(九)日志类Logger和LogStream,将日志信息打印到屏幕
每一个成熟的项目都有大大小小的日志系统,在关键的地方打印日志信息,常用来跟踪程序运行,查找错误原因等,可以节省大量的debug时间muduo的日志信息有5个级别TRACE,细粒度最高的日志信息,打印的最详细DEBUG,细粒度级别上对调试有帮助的日志信息INFO,粗粒度级别上强调程序的运行信息WARN,程序能正常运行,但存在潜在风险的信息ERROR,执行出错,但不影响程序继续执行的错误信息FATAL
一个程序渣渣的小后院
·
2020-08-14 19:38
muduo源码学习
muduo网络库源码分析
muduo网络库学习
(四)事件驱动循环EventLoop
muduo的设计采用高并发服务器框架中的oneloopperthread模式,即一个线程一个事件循环。这里的loop,其实就是muduo中的EventLoop,所以到目前为止,不管是Poller,Channel还是TimerQueue都仅仅是单线程下的任务,因为这些都依赖于EventLoop。这每一个EventLoop,其实也就是一个Reactor模型。而多线程体现在EventLoop的上层,即在
一个程序渣渣的小后院
·
2020-08-14 19:38
muduo源码学习
muduo网络库源码分析
muduo网络库学习
之muduo_http 库涉及到的类
1、httprequest:requestline+header+body(header分为普通报头,请求报头与实体报头)header与body之间有一空行(CRLF)请求方法有:Get,Post,Head,Put,Delete等协议版本1.0、1.1常用请求头Accept:浏览器可接受的媒体(MIME)类型;Accept-Language:浏览器所希望的语言种类Accept-Encoding:浏
s1mba
·
2020-08-14 16:10
muduo网络库学习
muduo网络库学习
之muduo_inspect 库涉及到的类
muduoinspect库通过HTTP方式为服务器提供监控接口,现在只实现进程相关信息的监控,通过成员ProcessInspector实现。ProcessInspector//通过ProcessInfo返回进程信息ProcessInfo//获取进程相关信息我们可以参照ProcessInspector实现一个如TcpStateInspector,作为Inspector的成员,这样就可以实现对Tcp连
s1mba
·
2020-08-14 16:10
muduo网络库学习
muduo网络库学习
之EventLoop(四):EventLoopThread 类、EventLoopThreadPool 类
1、EventLoopThread(IO线程类)任何一个线程,只要创建并运行了EventLoop,都称之为IO线程IO线程不一定是主线程muduo并发模型oneloopperthread+threadpool(计算线程池)为了方便今后使用,定义了EventLoopThread类,该类封装了IO线程EventLoopThread创建了一个线程在线程函数中创建了一个EvenLoop对象并调用Event
s1mba
·
2020-08-14 16:10
muduo网络库学习
muduo网络库学习
之Logger类、LogStream类、LogFile类封装中的知识点
一、Logger类、LogStream类1、日志作用开发过程中:调试错误更好的理解程序运行过程中:诊断系统故障并处理记录系统运行状态2、日志级别TRACE指出比DEBUG粒度更细的一些信息事件(开发过程中使用)DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中使用)INFO表明消息在粗粒度级别上突出强调应用程序的运行过程。WARN系统能正常运行,但可能会出现潜在错误的情形。ER
s1mba
·
2020-08-14 16:09
muduo网络库学习
muduo网络库学习
笔记(3):Thread类
muduo网络库采用了基于对象的编程思想来封装线程类。类图如下:变量numCreated_表示创建的线程个数,类型为AtomicInt32,用到了我们上篇所说的原子性操作。Thread类中还用到了CurrentThread类。代码要点如下:(1)线程标识符Linux中,每个进程有一个pid,类型为pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型为pthread_t
li27z
·
2020-08-14 16:37
muduo
muduo网络库学习
笔记(0):面向对象编程风格和基于对象编程风格的比较
我们通过对一个线程类的封装来比较这二者的不同。面向对象编程风格使用面向对象编程风格封装线程类,一般这么做:写一个Threadbaseclass,含有(纯)虚函数Thread::run(),然后应用程序派生一个derivedclass,覆写run()。程序里的每一种线程对应一个Thread的派生类。类图如下:代码如下:文件名:Thread.h--头文件#ifndef_THREAD_H_#define
li27z
·
2020-08-14 16:37
C/C++
muduo
muduo网络库学习
笔记(8):高效日志类的封装
前言在服务端编程中,日志是必不可少的。开发过程中,日志的存在能方便我们调试错误和更好地理解程序;运行过程中,日志能帮助我们诊断系统故障并处理、记录系统运行状态。muduo日志类封装细节(1)日志消息有多种级别(level),如TRACE、DEBUG、INFO、WARN、ERROR、FATAL。日志的输出级别在运行时可调。代码片段1:返回当前日志级别文件名:Logging.ccLogger::Log
li27z
·
2020-08-14 16:37
muduo
muduo网络库学习
笔记(6):单例类(线程安全的)
muduo用pthread_once实现了线程安全的Singleton。文件名:Singleton.htemplateclassSingleton:boost::noncopyable{public:staticT&instance(){pthread_once(&ponce_,&Singleton::init);return*value_;}private:Singleton();~Single
li27z
·
2020-08-14 16:06
muduo
muduo网络库学习
之EventLoop(三):Socket、Acceptor、TcpServer、TcpConnection(连接建立,接收消息)
1、Socket操作封装Endian.h封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。SocketsOps.h/SocketsOps.cc封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中)。Socket.h/Socket.cc(Socket类)用RAII方法封装socketfiledescriptorInetA
s1mba
·
2020-07-15 18:07
muduo网络库学习
在
Muduo网络库学习
过程中获得的C++知识
1.shared_ptr为了解决多线程编程下无法确定对象是否存活的问题,引入了智能指针shared_ptr。shared_ptr是引用计数型智能指针,当计数为0时,对象即被销毁。shared_ptr控制对象的生命期,只要有一个shared_ptr存在,对象x就不会被析构,当最后一个shared_ptr析构或reset时,对象会被析构。注意是当指针销毁,对象就被析构。借助shared_ptr还可以实
小黄的雷雷
·
2020-07-05 06:24
muduo网络库
muduo网络库学习
笔记(10):定时器的实现
传统的Reactor通过控制select和poll的等待时间来实现定时,而现在在Linux中有了timerfd,我们可以用和处理IO事件相同的方式来处理定时,代码的一致性更好。为什么选择timerfd常见的定时函数有如下几种:sleepalarmusleepnanosleepclock_nanosleepgetitimer/setitimertimer_create/timer_settime/t
li27z
·
2020-07-04 06:19
muduo
Muduo网络库学习
之Buffer读取与发送数据
Buffer存在的意义Buffer是Tcp网络编程中必不可少的东西。为什么必须要有要有Buffer。举个简单的例子,先说输出buffer,假如服务器要向客户端发送100KB数据,受到了某些因素的影响,一次性只能发送80KB,那剩余的20KB怎么办,总不可能把它丢掉吧。这时候Buffer的作用就出来了,它将缓存没发送完的20KB数据(把数据按时间顺序存好,有点像队列,先入先出),然后再次注册sock
段长风
·
2019-10-13 19:17
Muduo网络库
一个基于C++11的定时器队列(timerfd,poll实现)
原来的muduo中TimerQueue是专为EventLoop提供定时功能的组件,我在笔记
muduo网络库学习
笔记(三)TimerQueue定时器队列中解读过muduo这块代码,现在反过来,EventL
艾露米婭娜
·
2019-01-24 11:00
muduo网络库学习
笔记(五) 链接器Connector与监听器Acceptor
目录
muduo网络库学习
笔记(五)链接器Connector与监听器AcceptorConnector系统函数connect处理非阻塞connect的步骤:Connetor时序图Acceptor系统函数acceptSocket
艾露米婭娜
·
2018-11-17 13:00
muduo网络库学习
笔记(四) 通过eventfd实现的事件通知机制
目录
muduo网络库学习
笔记(四)通过eventfd实现的事件通知机制eventfd的使用eventfd系统函数使用示例EventLoop对eventfd的封装工作时序runInLoop()queueInLoop
艾露米婭娜
·
2018-11-14 23:00
muduo网络库学习
笔记(三)TimerQueue定时器队列
目录
muduo网络库学习
笔记(三)TimerQueue定时器队列Linux中的时间函数timerfd简单使用介绍timerfd示例muduo中对timerfd的封装TimerQueue的结构.TimerTimer
艾露米婭娜
·
2018-11-11 18:00
Muduo网络库学习
知识点总结
static_cast(expression)该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型
chudongfang2015
·
2017-07-20 11:37
Muduo网络库
muduo网络库学习
笔记(15):关于使用stdio和iostream的讨论
C/C++程序中需要执行输入/输出时,我们一般会用到stdio或iostream。stdio指C语言的scanf/printf系列格式化输入输出函数,iostream指C++语言的cin/cout输入输出对象等。但是,在真实的项目中很少用到iostream(muduo网络库也不例外),本篇就对二者的优、缺点进行一个小结(主要考虑x86Linux平台,不考虑跨平台的可移植性,但是要考虑32-bit和
Leeds1993
·
2017-05-28 23:00
muduo网络库学习
之MutexLock类、MutexLockGuard类、Condition类、CountDownLatch类封装中的知识点
一、MutexLock 类 class MutexLock : boost::noncopyable 二、MutexLockGuard类 class MutexLockGuard : boost::noncopyable 三
·
2015-10-29 08:47
CountDownLatch
muduo网络库学习
之muduo_inspect 库涉及到的类
muduoinspect库通过HTTP方式为服务器提供监控接口,现在只实现进程相关信息的监控,通过成员ProcessInspector实现。ProcessInspector//通过ProcessInfo返回进程信息 ProcessInfo//获取进程相关信息我们可以参照 ProcessInspector实现一个如TcpStateInspector,作为Inspector的成员,这样就可以实
Simba888888
·
2013-11-13 21:00
http
inspector
muduo
muduo网络库学习
之muduo_http 库涉及到的类
1、httprequest:requestline+header+body(header分为普通报头,请求报头与实体报头)header与body之间有一空行(CRLF)请求方法有:Get,Post,Head,Put,Delete等协议版本1.0、1.1常用请求头Accept:浏览器可接受的媒体(MIME)类型;Accept-Language:浏览器所希望的语言种类Accept-Encoding:浏
Simba888888
·
2013-11-13 16:00
http
request
response
muduo
muduo网络库学习
之EventLoop(七):TcpClient、Connector
Connector主要用于发起连接,并带有自动重连的功能,成员主要有一个channel_, C++Code 1 boost::scoped_ptr channel_; // Connector所对应的Channel与Acceptor相比少了一个acceptSocket_ 成员,因为Connector是创建一个新的sockfd并connect它,如下:Connector::start()-->
Simba888888
·
2013-11-10 18:00
connector
TcpClient
muduo
muduo网络库学习
之EventLoop(六):TcpConnection::send()、shutdown()、handleRead()、handleWrite()
首先在EventLoop(五)基础上,在TcpConnection构造函数中添加: C++Code 123 // 通道可写事件到来的时候,回调TcpConnection::handleWritechannel_->setWriteCallback( boost::bind(&TcpConnection::handleWrite, this));多了两个应用层缓冲区成员: C++Code 12
Simba888888
·
2013-11-10 13:00
shutdown
muduo
handleRead
handleWrite
muduo网络库学习
之EventLoop(五):TcpConnection生存期管理(连接关闭)
监听套接字可读事件是POLLIN;已连接套接字正常可读是POLLIN;正常可写是POLLOUT;对等方close/shutdown关闭连接,已连接套接字可读是POLLIN|POLLHUP;时序图分析:注意:将TcpConnectionPtr在connections_中erase掉,时并不会马上析构TcpConnection对象(引用计数不为0),因为此时正处于Channel::handleEven
Simba888888
·
2013-11-09 16:00
muduo
tcpConnection
muduo网络库学习
之EventLoop(四):EventLoopThread 类、EventLoopThreadPool 类
1、EventLoopThread(IO线程类)任何一个线程,只要创建并运行了EventLoop,都称之为IO线程IO线程不一定是主线程muduo并发模型oneloopperthread+threadpool(计算线程池)为了方便今后使用,定义了EventLoopThread类,该类封装了IO线程EventLoopThread创建了一个线程在线程函数中创建了一个EvenLoop对象并调用Event
Simba888888
·
2013-11-09 09:00
muduo
EventLoopThread
muduo网络库学习
之EventLoop(三):Socket、Acceptor、TcpServer、TcpConnection(连接建立,接收消息)
1、Socket操作封装Endian.h封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。SocketsOps.h/SocketsOps.cc封装了socket相关系统调用(全局函数,位于muduo::net::sockets名称空间中)。Socket.h/Socket.cc(Socket类)用RAII方法封装socketfiledescriptorInetA
Simba888888
·
2013-11-08 17:00
socket
tcpserver
muduo
tcpConnection
muduo网络库学习
之EventLoop(二):进程(线程)wait/notify 和 EventLoop::runInLoop
1、进程(线程)wait/notifypipesocketpaireventfdeventfd是一个比pipe更高效的线程间事件通知机制,一方面它比pipe少用一个filedescripor,节省了资源;另一方面,eventfd的缓冲区管理也简单得多,全部“buffer”只有定长8bytes,不像pipe那样可能有不定长的真正buffer。 C++Code 123456789 //该函数可以跨线程
Simba888888
·
2013-11-08 10:00
eventfd
muduo
runInLoop
muduo网络库学习
之EventLoop(一):事件循环类图简介和muduo 定时器TimeQueue
1、EventLoop、Channel、Poller等类图如下:黑色菱形:组合;白色菱形:聚合;白色三角形:继承;实线:关联;Channel是selectableIOchannel,负责注册与响应IO事件,它不拥有filedescriptor。Channel是Acceptor、Connector、EventLoop、TimerQueue、TcpConnection的成员。一个EventLoop对象
Simba888888
·
2013-11-07 22:00
muduo
EventLoop
timequeue
muduo网络库学习
之Logger类、LogStream类、LogFile类封装中的知识点
一、Logger类、LogStream类1、日志作用开发过程中:调试错误更好的理解程序运行过程中:诊断系统故障并处理记录系统运行状态2、日志级别TRACE指出比DEBUG粒度更细的一些信息事件(开发过程中使用)DEBUG指出细粒度信息事件对调试应用程序是非常有帮助的。(开发过程中使用)INFO表明消息在粗粒度级别上突出强调应用程序的运行过程。WARN系统能正常运行,但可能会出现潜在错误的情形。ER
Simba888888
·
2013-11-02 20:00
logfile
muduo
日志滚动
muduo网络库学习
之ThreadLocal
类、ThreadLocalSingleton
类封装知识点
一、ThreadLocal类1、在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。2、在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。3、但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。4、POSIX线程库通过维护一定的数据结构来解决这个问题,这些数据称为(Thread-specificData,或TSD)。5、
Simba888888
·
2013-11-01 21:00
threadLocal
muduo
线程特定数据
muduo网络库学习
之BlockinngQueue
类、ThreadPool 类、Singleton类封装中的知识点
一、BlockinngQueue类、BoundedBlockingQueue类生产者消费者问题,可以用信号量+互斥锁或者条件变量+互斥锁来解决,还分为有界和无界缓冲区两种情形,如下图:有界缓冲区:生产者:信号量+互斥锁:1,2,3,4,5条件变量+互斥锁:2,1,3,5,4(外框)消费者:信号量+互斥锁:1,2,3,4,5条件变量+互斥锁:2,1,3,5,4(外框)无界缓冲区:生产者:信号量+互斥
Simba888888
·
2013-11-01 19:00
生产者消费者问题
单例类
muduo
muduo网络库学习
之MutexLock类、MutexLockGuard类、Condition类、CountDownLatch类封装中的知识点
一、MutexLock类class MutexLock : boost::noncopyable二、MutexLockGuard类class MutexLockGuard : boost::noncopyable三、Condition类class Condition : boost::noncopyable某个线程:加锁 while(条件) wait
Simba888888
·
2013-10-31 19:00
Condition
CountDownLatch
mutex
muduo
muduo网络库学习
之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())
一、Exception类封装classException:publicstd::exception#includeintbacktrace(void**buffer,intsize);//backtrace栈回溯,保存各个栈帧的地址char**backtrace_symbols(void*const*buffer,intsize);//backtrace_symbols根据地址,转成相应的函数符号
s1mba
·
2013-10-29 21:37
muduo网络库学习
muduo网络库学习
之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())
一、Exception类封装class Exception :public std::exception #include intbacktrace(void**buffer,intsize);// backtrace栈回溯,保存各个栈帧的地址 char**backtrace_symbols(void*const*buffer,intsize);// backtrace_symbols根据地址,转
Simba888888
·
2013-10-29 21:00
thread
exception
muduo
pthread_atfork
muduo网络库学习
之Timestamp类、AtomicIntegerT 类封装中的知识点
一、Timestamp类封装class Timestamp :public muduo::copyable, public boost::less_than_comparable类图如下:值语义:可以拷贝,拷贝之后,与原对象脱离关系对象语义:要么是不能拷贝;要么可以拷贝,拷贝之后与原对象仍然存在一定的关系,比如共享底层资源两者之间的关系参见这里。1、muduo::c
Simba888888
·
2013-10-24 19:00
muduo网络库
上一页
1
下一页
按字母分类:
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
其他