Muduo

Linux C++ 网络库
授权协议 BSD
开发语言 C/C++
所属分类 程序开发、 高性能网络开发库
软件类型 开源软件
地区 不详
投 递 者 柳宪
操作系统 Linux
开源组织
适用人群 未知
 软件概览

muduo 是一个基于 Reactor 模式的现代 C++ 网络库,它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程网络应用程序。视频连接:http://v.youku.com/v_show/id_XNDIyNDc5MDMy.html

下面是性能比较图:

编者注:国人 @alexstocks 对该项目进行改造,使用 C++11 以及 Makefile 进行构建,详情请看 https://github.com/AlexStocks/muduo 

  • muduo网络库介绍 muduo网络库是陈硕大神开发的基于主从Reactor模式的,事件驱动的高性能网络库。 网络编程中有很多是事务性的工作,使用muduo网络库,用户只需要填上关键的业务逻辑代码,并将回调注册到框架中,就可以实现完整的网络服务。 muduo网络库的核心是one loop per thread + thread pool,有一个main Reactor负责accept连接,然后将连

  • 介绍 muduo 网络库,是陈硕大神发布在github上的一个c++项目。几乎没有引用第三方库,手动封装了系统api,非常适合不希望仅仅成为简单api调用员的programmer学习。使用cmake编译,同时可以顺便掌握cmake使用。总之我非常推荐后端程序员可以学习一下,尤其是c++程序员,无论是对底层的了解,还是代码规范都有很大程度上的促进作用。(不得不佩服大神的代码确实足够严谨) 如何学习m

  • 目录 过程一:EventLoop loop 过程二:InetAddress listenAddr(2007) 过程三:EchoServer server(&loop, listenAddr) 过程四:server.start() 过程五:loop.loop() 总结 muduo的设计真的很巧妙。不少人说这个网络库的源码剖析起来比较容易,但是我感觉里面调用来调用去还是比较复杂的。 本文如果有不对的地

  • 概述 这一部分就是muduo库之所以十分高效的原因,将前端与后端联系起来,实现了多生产者单消费者的异步网络日志库。 在多线程服务器程序当中,异步日志(非阻塞日志)是必须的,因为如果在网络IO线程或业务线程中直接往磁盘写数据的话,写操作偶尔可能阻塞长达数秒之久。这可能导致请求方超时,或耽误发送心跳消息,在分布式系统过更可能发生连锁效应。因此在正常的实现业务处理流程中应该彻底避免磁盘IO,这在one

  • 在上一个集群聊天服务器项目中,我使用了muduo作为网络库,然后主要实现了业务逻辑等,所以为了深入网络库的代码和实现,我跟着一位老师的代码去实现了muduo库的基本原理和作用,当然只是实现了主体的代码,有些细节便没有深究,以下是自己的目标: 从开源C++ muduo网络库,学习优秀的代码设计 掌握基于事件驱动和事件回调的epoll+线程池面向对象编程 实现TcpServer、TcpConnecti

 相关资料
  • 前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)[1]。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。 NiN块 我们知道,卷积层

  • 在 libuv 中,网络编程与直接使用 BSD socket 区别不大,有些地方还更简单,概念保持不变的同时,libuv 上所有接口都是非阻塞的。它还提供了很多工具函数,抽象了恼人、啰嗦的底层任务,如使用 BSD socket 结构体设置 socket 、DNS 查找以及调整各种 socket 参数。 在网络I/O中会使用到uv_tcp_t和uv_udp_t。 note 本章中的代码片段仅用于展示

  • 1 三次握手 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数 A。 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1

  • 网络 [IPV6] ipv6.disable={0|1} ipv6.disable_ipv6={0|1} 是否在所有网络接口上禁用IPv6支持:0(默认值)表示在所有网络接口上开启IPv6支持;1 表示在所有网络接口上关闭IPv6支持。建议使用"ipv6.disable=1"(彻底禁用ipv6内核模块) [IPV6] ipv6.autoconf={0|1} 是否在所有网络接口上开启IPv6地址自动

  • 帮助用户解决网络方面的问题,涵盖VPC、二层网络、IP子网、域名服务、安全组、弹性网卡、EIP、负载均衡内容。 网络管理包括哪些内容? 主要包括VPC、二层网络、IP子网、预留IP、安全组、EIP、弹性网卡、密钥、域名服务等方面内容。 产品支持哪些速率的网络接口? 支持40G、千兆、万兆等速率的网络接口,实际生产环境建议千兆以上。 管理网络和数据网络放在一起会影响吗? 建议将管理网络和数据网络分离

  • 网络主要包括基础网络和负载均衡,其中基础网络包括VPC、路由表、二层网络、IP子网等;负载均衡包括负载均衡集群和实例等。 地域 地域包括区域和可用区,代表资源的物理位置。 基础网络 基础网络主要用于为宿主机、计算主机等提供IP地址资源等。主要包括全局VPC、VPC、、二层网络、IP子网、预留IP。 网络服务 网络服务提供弹性公网IP、NAT网关、DNS解析等功能。 网络安全 网络安全目前包括WAF

  • 包括安全组、IP子网、弹性公网IP的内容。 安全组 安全组是一种虚拟的包过滤防火墙,通过设置安全组出入方向的规则来控制关联的虚拟机的访问策略。如控制虚拟机是否被其他网络可以被访问,以及虚拟机可访问的外部资源等。 IP子网 IP子网用于为虚拟机、宿主机等资源提供IP地址。 弹性公网IP 弹性公网IP(Elastic IP)是一种NAT IP,通过与虚拟机绑定,将弹性公网IP与虚拟机的私有地址进行NA

  • 发起请求 request 基础库1.3.9开始支持,iOS版本2.1.23,Android版本2.1.38 request(Object object) 利用原生Api发起HTTP网络请求,执行后返回 RequestTask 对象。 参数 Object object 属性 类型 默认值 必填 说明 url string 是 开发者服务器接口地址 data string/object/ArrayBu