
Muduo源码分析
文章平均质量分 88
Muduo 是一个基于 Reactor 模式的现代 C++ 网络库,它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程网络应用程序。分析其源码对学习linux网络编程有着很大的作用。
NK_test
大部分人愿意做任何事来逃避真正的思考
展开
-
Muduo 网络库源码分析 之 关键技术点总结
最近又把muduo网络库仔细研究了一遍,收获良多。本文将对muduo中的设计思想以及关键的技术细节进行总结和分析,当然由于篇幅的原因这里更多的是对关键技术的简略提及,具体细节还需要读者自己去查找学习资料。muduo/baseDate类 日期类的封装,使用Julian(儒略日)可以方便的计算日期差。具体公式和思想见 儒略日的计算Exception类 异常类的封装,对外提供what()输出错误信原创 2017-04-28 18:41:59 · 3138 阅读 · 2 评论 -
使用Muduo完成数独和八数码问题求解服务器
在剖析完Muduo网络库源码之后,我们试着完成一个高效的数独和八数码问题求解服务器。先说说为什么要选择这两个问题?数独问题一直是陈硕老师很喜欢的问题,在muduo网络库中多次提到并有示例。八数码问题是我很喜欢的问题,所以在此综合完成求解数独和八数码问题的高效服务端程序。编写这样一个看似简单的服务程序的技术含量远高于所谓的控件堆砌型开发,虽然有muduo网络库帮助我们处理网络事件,我们只需要原创 2016-05-28 21:08:50 · 12371 阅读 · 0 评论 -
Muduo网络库源码分析(六)TcpConnection 的生存期管理
TcpConnection是使用shared_ptr来管理的类,因为它的生命周期模糊。TcpConnection表示已经建立或正在建立的连接,建立连接后,用户只需要在上层类如TcpServer中设置连接到来和消息到来的处理函数,继而回调TcpConnection中的 setConnectionCallback和setMessageCallback函数,实现对事件的处理。用户需要关心的事件是有限的,原创 2016-04-22 15:29:13 · 7870 阅读 · 0 评论 -
Muduo网络库源码分析(五)Acceptor和TcpServer类
首先,我们先提一下对Socket的封装(不复杂,所以简单说一下)。Endian.h : 封装了字节序转换函数(全局函数,位于muduo::net::sockets名称空间中)。SocketsOps.h/ SocketsOps.cc :封装了socket相关系统调用。Socket.h/Socket.cc(Socket类): 用RAII方法封装socket file descrip原创 2016-04-16 01:09:29 · 10090 阅读 · 0 评论 -
Muduo网络库源码分析(四)EventLoopThread和EventLoopThreadPool的封装
muduo的并发模型为one loop per thread+ threadpool。为了方便使用,muduo封装了EventLoop和Thread为EventLoopThread,为了方便使用线程池,又把EventLoopThread封装为EventLoopThreadPool。所以这篇博文并没有涉及到新鲜的技术,但是也有一些封装和逻辑方面的注意点需要我们去分析和理解。EventLoopTh原创 2016-04-15 13:34:02 · 8990 阅读 · 0 评论 -
Muduo网络库源码分析(三)线程间使用eventfd通信和EventLoop::runInLoop系列函数
先说第一点,线程(进程)间通信有很多种方式(pipe,socketpair),为什么这里选择eventfd?eventfd 是一个比 pipe 更高效的线程间事件通知机制,一方面它比 pipe 少用一个 file descripor,节省了资源;另一方面,eventfd 的缓冲区管理也简单得多,全部“buffer” 只有定长8 bytes,不像 pipe 那样可能有不定长的真正 buf原创 2016-04-12 23:59:56 · 10052 阅读 · 1 评论 -
Muduo网络库源码分析(二) 定时器TimeQueue,Timer,TimerId
首先,我们先要明白为什么需要设计这样一个定时器类?在开发Linux网络程序时,通常需要维护多个定时器,如维护客户端心跳时间、检查多个数据包的超时重传等。如果采用Linux的SIGALARM信号实现,则会带来较大的系统开销,且不便于管理。Muduo 的 TimerQueue 采用了最简单的实现(链表)来管理定时器,它的效率比不上常见的 binary heap 的做法,如果程序中大原创 2016-04-04 19:53:11 · 5721 阅读 · 1 评论 -
Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)
从这一篇博文起,我们开始剖析Muduo网络库的源码,主要结合《Linux多线程服务端编程》和网上的一些学习资料!(一)TCP网络编程的本质:三个半事件1. 连接的建立,包括服务端接受(accept) 新连接和客户端成功发起(connect) 连接。TCP 连接一旦建立,客户端和服务端是平等的,可以各自收发数据。2. 连接的断开,包括主动断开(close 或shutdown) 和被动断开原创 2016-04-04 00:05:33 · 6836 阅读 · 2 评论