muduo学习笔记
Wendell_0
这个作者很懒,什么都没留下…
展开
-
使用CMakeLists.txt和vscode的muduo环境设置
使用CMakeLists.txt的muduo环境设置@(CMake笔记)1、CMakeLists.txt下面的编写方式可以通过cmake . -DCMAKE_BUILD_TYPE=Release或者cmake . -DCMAKE_BUILD_TYPE=Debug选择使用release模式生成的muduo还是debug模式生成的muduo。#声明要求的cmake版本cmake_minimum_required(VERSION 3.10)# 工程名project(setConfiugre)#原创 2021-10-26 21:21:50 · 536 阅读 · 0 评论 -
网络库缓冲区实践思路
网络库缓冲区实践思路@(网络编程实现)下面给出的是借鉴于muduo::Buffer的非阻塞I/O,TCP套接字的缓冲区设置。关键字:非阻塞网络、TCP、多连接、简单为什么需要缓冲区为什么需要输出缓冲区受限于TCP协议,应用程序要发送的数据可能无法一次发送完成。在这种情况下,应用程序不可能阻塞在发送端口上。这就需要缓冲区暂时保存还未发送的数据,待套接字可写时再又网络库发送。为什么需要输入缓冲区应用程序只关心消息到达,而不关心数据到达;TCP协议是无消息边界的字节流协议。原创 2021-09-29 20:27:27 · 152 阅读 · 0 评论 -
TcpConnection的上下文
#20210917 TcpConnection的上下文如有问题,欢迎交流!上下文相关API:void TcpConnection::setContext(const boost::any& context){context_ = context;}boost::any* TcpConnection::getContext() const{return context_}解释:用于记录本次和本次连接密切相关的信息...原创 2021-09-17 15:56:50 · 160 阅读 · 0 评论 -
TCPServer Class源码阅读(muduo::net)
#TCPServer Class源码阅读(muduo::net)跟着大佬走,走的就是快呀TCPServer是服务器类,直接提供给用户使用,用户通过注册回调函数来实现业务逻辑。数据成员EventLoop* loop_本TCPServer Class对象所属EventLoop对象const string ipPort_字符串类型的ip地址和端口号cosnt string name_名称,用于输出调试信息std::unique_ptr<Acceptor>原创 2021-08-24 21:12:27 · 163 阅读 · 0 评论 -
EventLoopThreadPool Class源码阅读(muduo::net)
#EventLoopThreadPool Class`源码阅读(muduo::net)如果有问题,欢迎交流!!!数据成员EventLoop* baseLoop_EventLoopTreadPool Class对象所在loop。有些成员函数在执行前要检查当前是不是在baseLoop_所在线程string name_用于给一众EventLoopThread命名int numThreads_创建的线程数量next_下一个EventLoop对象std::vec原创 2021-08-24 18:38:11 · 94 阅读 · 0 评论 -
EventLoopThread源码阅读(muduo::net)
#20210824 EventLoopThread源码阅读(muduo::net)如果有问题,欢迎交流!!!EventLoopThread Class创建一个线程执行loop()循环,并返回该EventLoop对象的地址。EventLoopThread Class控制其创建的线程和loop()循环的生命期。数据成员EventLoop* loop_本EventLoopThread Class所创建的EventLoop对象所在的地址bool exiting_初始化为false,析构函原创 2021-08-24 16:39:30 · 88 阅读 · 0 评论 -
InetAddress Class源码阅读(muduo::net)
InetAddress Class源码阅读(muduo::net)如果有问题,欢迎交流对网络地址的封装。数据成员union{stuct sockaddr_in addr_;struct sockaddr_in6 addr6_;}也就是说,对于一个InetAddress Class类型的对象来说,它既可以是一个ipv4,也可以是一个ipv6。反正大多数基本api输入的参数都要sockaddr,然后自己检查类型。我们可以先获取addr_,然后再根据sin_family做最终确定。就像socket原创 2021-07-26 11:15:43 · 128 阅读 · 0 评论 -
Socket Class源码阅读(muduo::net)
Socket Class源码阅读(muduo::net)如果有问题,欢迎交流指正!!!基于RAIIRAIIRAII机制对套接字的封装。数据成员const int sockfd_在构造函数中初始化(拷贝初始化,不涉及调用socket(2)的操作),在析构函数中关闭。函数成员int fd()返回套接字bool getTcpInfo(struct tcp_info* tcpi)调用getsockopt获取套接字的信息bool getTcpInfoString(cha原创 2021-07-26 11:02:57 · 102 阅读 · 0 评论 -
InetAddress Class源码阅读(muduo::net)
InetAddress Class源码阅读(muduo::net)如果有问题,欢迎交流!!!对网络地址的封装。数据成员union{stuct sockaddr_in addr_;struct sockaddr_in6 addr6_;}也就是说,对于一个InetAddress Class类型的对象来说,它既可以是一个ipv4,也可以是一个ipv6。反正大多数基本api输入的参数都要sockaddr,然后自己检查类型。我们可以先获取addr_,然后再根据sin_family做最终确定。就像soc原创 2021-07-24 20:43:18 · 148 阅读 · 0 评论 -
sockets namespace源码阅读(muduo::net::SocketsOps)
sockets namespace源码阅读(muduo::net)@(Linux多线程服务端编程:使用muduoC++网络库读书笔记)对套接字基本api比如connect、bind、listen等的封装。还有一些负责类型转换的函数。sockaddr* sockaddr_cast一系列的重载还是,负责将输入的或是sockaddr_in,或是sockaddr_in6类型的地址调用隐式类型转换转换为sockaddr。sockaddr_in* sockaddr_in_cast负责将sock原创 2021-07-24 19:38:07 · 113 阅读 · 0 评论 -
Timestamp Class源码阅读
Timestamp Class源码阅读如有问题,欢迎交流!!!微秒精度的epoch时间。只有一个数据成员,就是这个时间,然后围绕这个时间提供了一系列功能。这个epoch时间计算的是以1970年为基准的时间,主要由定时器调用,所以不必担心数值过大的问题。数据成员microSecondsSinceEpoch_这就是那个微妙时间,只有这一个数据成员。在构造函数中初始化。函数成员该函数外,重载了相关的比较运算符。string toString()将微秒时间转换为字符串类型的秒s原创 2021-07-17 11:23:33 · 146 阅读 · 0 评论 -
BoundedBlockingQueue Class源码阅读(muduo/base)
BoundedBlockingQueue Class源码阅读(muduo/base)如果有问题,欢迎交流!!!阻塞队列模板类的有限版本,其队列大小在构造函数中被初始化,并定义了用于判断队列空或满的函数,而且其队列大小确定后不能改变。数据成员template<typename T>boost::circular_buffer<T> queue_队列,但这个类型是什么?一个环状的缓冲区Condition notEmpty_条件变量,用于通知队列非空C原创 2021-07-16 20:56:40 · 92 阅读 · 0 评论 -
BlockingQueue Class源码阅读
BlockingQueue Class源码阅读如果有问题,欢迎交流!!!阻塞队列,干嘛的?BlockingQueue Class是一个模板类,会将类型为T的对象保存,或弹出。用来干嘛?数据成员template<typename T>Condition notEmpty_条件变量,用于通知阻塞线程,队列非空。因为这个队列大小是不设限制的,所以不需要额外的条件变量通知线程已满。std::deque<T> queue_保存类型为T的对象的队列mutab原创 2021-07-16 20:43:40 · 76 阅读 · 0 评论 -
ThreadPool Class源码阅读
ThreadPool Class如果有问题,欢迎交流!!!线程池,维护一个业务函数序列,创建线程池并逐一执行业务函数。数据成员Condition notEmpty_条件变量,用于通知线程序列非空Condition notFull_条件变量,用于通知线程序列未满std::deque<std::function<void()>> queue_业务函数序列mutable MutexLock mutex_锁,保护条件变量notEmpty_、原创 2021-07-16 10:39:28 · 133 阅读 · 0 评论 -
Thread Class源码阅读
Thread Class源码阅读(muduo/base/Thread)如有问题,欢迎交流!!!Thread Class是对<pthread.h>下线程的封装,使用默认线程属性。相关类型和函数void* startThread(void* obj)这就是对执行线程函数的第二层封装,在其内部调用线程函数的封装ThreadData::runInThread()。struct ThreadData这是线程函数startThread的参数类型。std::function&l原创 2021-07-14 13:06:17 · 178 阅读 · 0 评论 -
namespace CurrentThread源码阅读
namespace CurrentThread源码阅读如有问题,欢迎交流!!!该命名空间定义了一系列,线程空间下的全局全局变量,比如线程ID、线程名等,提供给诸如日志撰写等功能函数调用。数据成员extern __thread int t_cachedTid通过syscall(SYS_gettid)获取的全局唯一的线程ID。extern __thread char t_tidString[32]通过将CurrentThread::t_cachedTid字符串化获得。exter原创 2021-07-14 11:56:34 · 146 阅读 · 0 评论 -
Condition Class (muduo/base/Condition.h)& MutexLock Class,MutexLockGuard Class(muduo/base/Mutex.h)详解
Condition Class (muduo/base/Condition.h)& MutexLock Class,MutexLockGuard Class(muduo/base/Mutex.h)源码阅读如有问题,欢迎交流!!!MutexLock Class单纯是对<pthread.h>下锁的封装,但是在.h文件中有很多宏定义。MutexLock Class有两个数据成员:锁,pthread_mutex_t mutex_和持有锁的线程,pid_t holder_。该类在原有<原创 2021-07-13 16:34:06 · 178 阅读 · 0 评论 -
EventLoop Class源码阅读
#EventLoop Class源码阅读这部分有点复杂,欢迎大家交流事件循环,服务器代码main函数最后的while循环。负责调用Poller监听触发的事件,调用Channel::handleEvent处理就绪的事件。数据成员bool looping_是否正在进行事件循环,在构造函数中初始化为false,在EventLoop::loop()中初始化为true。bool std::atomic<bool> quit_;原子型变量,初始化为false,EventLoop:原创 2021-07-06 20:48:02 · 114 阅读 · 0 评论 -
TimerQueue Class源码阅读
TimerQueue Class源码阅读@(Linux多线程服务端编程:使用muduoC++网络库读书笔记)文章目录`TimerQueue Class`源码阅读`Timer Class`源码阅读数据成员函数成员`TimerId Class`数据成员函数成员`TimerQueue Class`数据成员函数成员TimerQueue Class封装了基于timerfd的计时器,可是它承担什么工作呢?单纯是确定当前的时间吗?超时回调,超时的时候进行什么工作吗?它来帮助epoll实现0轮询吗?TimerQue原创 2021-07-06 19:07:19 · 254 阅读 · 0 评论 -
Channel Class详解&源码阅读
Channel Class源码阅读欢迎交流!!!Channel Class封装关心的文件描述符、关心的事件和对应的处理函数。该对象的实例只能在所属的EventLoop中被调用,所以不需要考虑线程安全问题。数据成员loop_该对象的实例所在的EventLoopfd_该对象关心的文件描述符events_该对象关心的事件revents_触发的事件index_标识,标定当前channel处于未被监视、不关心事件,被监视未被监视、不关心事件,被监视未被监原创 2021-06-30 20:24:55 · 232 阅读 · 0 评论 -
EPollPoller Class详解&源码阅读
EPollPoller Class源码阅读如有问题,欢迎交流EPollPoller Class是以Poller Class为基类,基于epoll(4)封装I/O多路复用I/O多路复用I/O多路复用的具体类。数据成员EventLoop* ownerLoop_本实例所在的EventLoop,继承自基类std::map<int,Channel*> channels_本实例所监视的文件描述符,继承自基类kInitEventListSize = 16用于初始化触发事原创 2021-06-30 19:25:11 · 160 阅读 · 0 评论 -
PollPoller Class详解/源码阅读(muduo/net/poller)
PollPoller Class源码阅读(muduo/net/poller)@(如有问题欢迎交流)PollPoller Class是基于poll(2)的I/O复用I/O复用I/O复用具体类,以Poller Class为基类。数据成员EventLoop* ownerLoop_继承于基类,通过构造函数初始化std::map<int, Channel*> channels_继承于基类std::vector<struct pollfd> pollfds_原创 2021-06-29 15:19:18 · 115 阅读 · 0 评论 -
Poller Class详解(muduo/net)
Poller Class详解(muduo/net)@(Linux多线程服务端编程:使用muduoC++网络库读书笔记)Poller Class是一个抽象基类,是对I/O多路复用I/O多路复用I/O多路复用的抽象。它是基于poll(2)的PollPoller Class(muduo/net/Poller)和基于epoll(4)的EPollPoller Class(muduo/net/Poller)的基类。数据成员EventLoop* ownerLoop_Poller所在的EventLoop,P原创 2021-06-29 11:41:28 · 138 阅读 · 0 评论 -
VS2017远程与muduo环境配置方法一 release版
VS2017远程与muduo环境配置方法一 release版@(Linux多线程服务端编程:使用muduoC++网络库读书笔记)具体配置分成三步:安装muduo的头文件到系统目录下安装muduo的库文件到系统目录下设置vs2017的属性表安装muduo头文件到系统目录下拷贝../build/release-install-cpp11/include/muduo到/usr/local/include下安装muduo库文件到系统目录下拷贝../build/release-install原创 2021-06-17 11:02:16 · 246 阅读 · 0 评论