
Muduo网络库
文章平均质量分 79
打完代码打篮球
欢迎讨论~~
展开
-
【Muduo】TcpServer类
TcpServer统领之前所有的类,是用户直接使用的类。它通过ThreadPool管理所有的loopthread,保存所有的TcpConnection,保存用户提供的各种回调函数并向TcpConnection的Channel中注册回调。它负责监听指定的端口,并接受来自客户端的连接请求,为每个连接创建一个TcpConnection对象进行管理。它的业务逻辑较先前的三大组件来说,还是比较简明的。原创 2024-05-24 20:28:35 · 505 阅读 · 0 评论 -
【Muduo】TcpConnection类
Muduo网络库的TcpConnection类代表了TCP连接的一端,即服务器与远程对等端之间的连接。TcpConnection类知道自身和对端的InetAddress、封装了前面讲过的Socket类和Channel类,并且保有管理自己的subLoop指针,还有多种事件处理函数和回调,还有属于自己的接收Buffer/发送Buffer。为上层应用提供了简洁的接口来处理连接的生命周期和数据传输。原创 2024-05-24 19:33:23 · 1057 阅读 · 0 评论 -
【Muduo】缓冲区Buffer类
在 Muduo 网络库中,Buffer类用于处理网络 I/O 中的数据缓冲。防止应用程序读写太快而网络链路收发速度慢导致的速度不匹配问题。这个类封装了一个内部缓冲区(使用了),并提供了一系列方法来操作这个缓冲区,如读取、写入、扩容等。原创 2024-05-24 19:08:06 · 685 阅读 · 0 评论 -
非阻塞sokcet和epoll
在Muduo网络库中同时使用了非阻塞socket与epoll,在此简单梳理下。非阻塞sokcet和epoll共同工作的过程主要涉及网络编程中的非阻塞I/O和事件驱动机制。readwriteacceptfcntlO_NONBLOCKreadwrite-1此图是模型图。epoll属于IO复用的一种。图中下方的read可以是阻塞IO,也可是本文讲的非阻塞IO。需要注意的是,当使用非阻塞socket和epoll的ET模式结合进行编程时,需要特别注意数据的完整性和连接的稳定性。原创 2024-05-24 18:57:19 · 1145 阅读 · 0 评论 -
【Muduo】接收新连接的Acceptor类
在 Muduo 的设计中,Acceptor类扮演着接受客户端连接请求的关键角色,其运行在每一个TcpServer实例中。一个服务器通常只创建一个监听socket描述字,故其在TcpServer中只有一个,用来监听服务器的唯一socket。它也会将传来的mainLoop和acceptSocket封装成一个Channel,这个Channel只对读事件感兴趣,也就是说,只通过回调函数 handleRead() 处理有新客户端连接请求的事件。* loop_:指向EventLoop的指针,用于处理 I/O 事件。原创 2024-05-24 18:27:37 · 928 阅读 · 0 评论 -
【Muduo】套接字:InetAddress、Socket
在 Muduo中,InetAddress和Socket是偏向底层的两个模块,封装了底层的一些系统调用,提供了好用的接口。原创 2024-05-23 18:52:00 · 430 阅读 · 0 评论 -
【Muduo】线程:Thread、EventLoopThread、EventLoopThreadPool
Muduo是 one loop per thread 模型的典范,其将EventLoop和thread封装成EventLoopThread,并且实现了一个简单的线程池来管理所有运行着loop的线程。原创 2024-05-23 18:34:49 · 562 阅读 · 0 评论 -
【Muduo】三大核心之EventLoop
当mainLoop接受到一个新的连接请求时,它会根据EventLoopThreadPool中的线程来选择一个subLoop,将新创建的TcpConnection的Channel放入这个subLoop中。每个subLoop都在一个独立的线程上运行,有一个用于唤醒自身的fd和Channel,运行一个Poller,并保存自己管理的多个Channel,以实现并发处理多个连接的目的。subLoop中的事件处理逻辑与mainLoop类似,也是通过Poller来监听fd上的事件,并调用相应的回调函数来处理这些事件。原创 2024-05-23 18:13:14 · 1063 阅读 · 0 评论 -
【Muduo】三大核心之Poller、EPollPoller
EPollPoller根据epoll_wait返回的文件描述符集合和事件类型,通过在epoll_event的data.ptr字段预先设置Channel对象的地址,从而能够找到对应的Channel对象,并调用其上的回调函数来处理事件。可以添加新的文件描述符、修改已注册的文件描述符的事件类型或删除已注册的文件描述符。:EPollPoller利用了epoll机制的高效性,能够同时监听大量的文件描述符,并且在有事件发生时只返回有事件发生的文件描述符集合,避免了轮询所有文件描述符的开销。原创 2024-05-23 17:36:53 · 2174 阅读 · 0 评论 -
【Muduo】三大核心之Channel
Muduo网络库的Channel模块是一个关键组件,它封装了文件描述符(fd)及其相关的事件,使得在TCP网络编程中能够利用IO多路复用技术(如epoll/poll)来监听和处理这些文件描述符上的事件。文件描述符(fd):每个Channel对象都对应一个特定的文件描述符,该文件描述符通常代表一个网络连接。感兴趣的事件(events):Channel对象封装了与文件描述符相关的一组感兴趣的事件,如可读、可写等。原创 2024-05-23 16:49:35 · 393 阅读 · 0 评论 -
【Muduo】Noncopyable、Logger、Timestam代码逻辑梳理
在开始之前,先将用到的一些工具类实现。原创 2024-05-23 16:33:32 · 247 阅读 · 0 评论 -
【Muduo】网络库框架模型和各模块简介
Muduo是由陈硕大佬个人开发的C++网络库,最近在剖析其源码,在此做一些归纳整理。原创 2024-05-21 19:51:25 · 1100 阅读 · 0 评论