muduo网络库源码阅读Step by Step
一般写服务端程序都需要有一个称手的网络库来帮我们处理琐碎的网络通信细节,比如连接的建立、关闭,读取数据,发送数据,接收、发送缓冲区的管理等,常用的C/C++网络库有libevent,asio,libev,我们项目组使用的是 muduo网络库 。muduo是 陈硕 写的,基于非阻塞IO和事件驱动的现代C++网络库,原生支持one loop per thread模型(即reactor模型),它适合开发Linux下的面向业务的多线程服务端网络应用程序。在Linux上muduo的性能(吞吐量、高并发下的事件处理效率)比其它网络库都要好,编程接口也很友好,它使用了很多Boost C++的现代特性(比如用RAII来管理资源,用function/bind来代替虚函数作为库的回调接口,借助shared_ptr实现线程安全的对象回调等),代码写得很精练简洁,而且源代码中附带有很多例子程序,是学习网络编程的很好范例,值得细细品读。 我从进项目组开始,花了6个月时间,把muduo相关的代码、例子程序、书都研究了一遍,感觉受益非浅,尤其是对处理网络通信的细节、异常处理了然于胸,写起代码来很顺溜。现在大概总结下阅读muduo网络库的顺序。 Step 0 熟悉boost智能指针、function/bind的使用 在muduo库内部使用了boost::scoped_ptr,weak_ptr,shared