muduo

muduo网络库源码阅读Step by Step

北城以北 提交于 2020-01-09 16:45:35
一般写服务端程序都需要有一个称手的网络库来帮我们处理琐碎的网络通信细节,比如连接的建立、关闭,读取数据,发送数据,接收、发送缓冲区的管理等,常用的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

10万并发的高性能c++ webserver设计与实现

自古美人都是妖i 提交于 2019-12-23 02:16:51
简介 该项目使用c++11,参考muduo实现的静态web服务器。muduo网络库使用线程池+电平触发式epoll+NIO的Reactor模式实现。该项目汲取muduo的优点,并简化设计。采用线程池+边沿触发式epoll+NIO的Reactor模式实现,各个工作线程采用RR方式(Round Robin)来公平分配请求,同时引入了应用层心跳,来处理超时连接。该webserver支持长、短连接,采用被动式关闭,能优雅的断开连接。 该项目参考muduo网络库Tcp骨架,针对Http协议处理过程设计而成。主要引入了HttpServer、HttpConnection和HttpHandler和HttpManager几个类,已应对接受Http请求、解析Http请求、应答Http请求以及管控Http连接的需要。 采用压力测试工具webbench 1.5,实验得出:采用环回地址测试时,在10k长连接状态下,60s能处理1500w+个请求,响应能力为35 M/s。采用局域网地址测试时,在10k长连接状态下,60s能处理750w+个请求,响应能力为1.67 M/s。启动webserver时内存占用为1.8MB;10k长连接下,平均占用15MB内存。 为方便测试,该项目也加入了简易的资源监控脚本、内存泄露检测脚本、一键启动webserver脚本,以及压力测试脚本。 目录结构 ├── code │ ├──

Linux多线程服务器端编程

泄露秘密 提交于 2019-12-17 14:03:31
目录 Linux多线程服务器端编程 线程安全的对象生命期管理 对象的销毁线程比较难 线程同步精要 借shared_ptr实现写时拷贝(copy-on-write) 多线程服务器的适用场合与常用编程模型 单线程服务器的常用编程模型 多线程服务器的常用编程模型 分布式系统中使用TCP长连接通信 C++多线程系统编程精要 高效的多线程日志 日志功能的需求 多线程异步日志 muduo网络库简介 TCP网络编程最本质的是处理三个半事件: 在一个端口上提供服务,并且要发挥多核处理器的计算能力 muduo编程示例 一种自动反射消息类型的Google Protobuf网络传输方案 短址服务 muduo库设计与实现 分布式系统工程实践 C++编译链接模型精要 Linux多线程服务器端编程 源码链接 。 muduo的编译安装 . 陈硕的编译教程 。 bazel编译文件不能有中文路径。 安装到指定目录: /usrdata/usingdata/studying-coding/server-development/server-muduo/build/release-install-cpp11/lib/libmuduo_base.a. 这本书前前后后看了三四遍,写得非常有深度,值得推荐。 编译和安装 . 线程安全的对象生命期管理 利用shared_ptr和weak_ptr避免对象析构时存在的竞争条件