主流服务器框架总结

libevent

 编辑
Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomit、 Nylon、 Netchat等
 ASIO
Boost.ASIO 是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库。已被推荐进入TR2,这意味着它有成为C++标准库的可能。

muduo 

muduo 是一个基于非阻塞 IO 和事件驱动的现代 C++ 网络库,原生支持 one loop per thread 这种 IO 模型。muduo 适合开发 Linux 下的面向业务的多线程服务端网络应用程序,其中“面向业务的网络编程”的定义.

最近简单读了下muduo的源码,本文对其主要实现/结构简单总结下。

muduo的主要源码位于net文件夹下,base文件夹是一些基础代码,不影响理解网络部分的实现。muduo主要类包括:

  • EventLoop
  • Channel
  • Poller
  • TcpConnection
  • TcpClient
  • TcpServer
  • Connector
  • Acceptor
  • EventLoopThread
  • EventLoopThreadPool

其中,Poller(及其实现类)包装了Poll/EPoll,封装了OS针对设备(fd)的操作;Channel是设备fd的包装,在muduo中主要包装socket;TcpConnection抽象一个TCP连接,无论是客户端还是服务器只要建立了网络连接就会使用TcpConnection;TcpClient/TcpServer分别抽象TCP客户端和服务器;Connector/Acceptor分别包装TCP客户端和服务器的建立连接/接受连接;EventLoop是一个主控类,是一个事件发生器,它驱动Poller产生/发现事件,然后将事件派发到Channel处理;EventLoopThread是一个带有EventLoop的线程;EventLoopThreadPool自然是一个EventLoopThread的资源池,维护一堆EventLoopThread。

阅读库源码时可以从库的接口层着手,看看关键功能是如何实现的。对于muduo而言,可以从TcpServer/TcpClient/EventLoop/TcpConnection这几个类着手。接下来看看主要功能的实现:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis输入映射和输出映射

Mapper.xml映射文件中定义了操作数据库的sql&#xff0c;每个sql是一个statement&#xff0c;映射文件是mybatis的核心。输入参数映射parameterType(输入类型)传递简单类型&#xff1a;如&#xff1a;<select id"queryUserById" parameterType"Integer"…

树结构练习——排序二叉树的中序遍历

题目描述 在树结构中&#xff0c;有一种特殊的二叉树叫做排序二叉树&#xff0c;直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树&#xff08;如果存在的话&#xff09;的关键值小于该节点的关键值 (3).任意一个节点的右子树&#xff08;如果存在的…

陈硕知乎专栏

https://www.zhihu.com/people/giantchen/answers

Mybatis动态sql的使用

通过mybatis提供的各种标签方法实现动态拼接sql。 为什么用if标签? UserMapper.xml配置sql&#xff0c;如下&#xff1a; <!-- 根据条件查询用户 --> <select id"queryUserByWhere" parameterType"user" resultType"user">SELEC…

面向对象设计之CRC卡片

1.什么是 CRC card&#xff1f; CRC (Class-Responsibility-Collaborator) Card是目前比较流行的面向对象分析建模方法。在CRC建模中&#xff0c;用户、设计者、开发人员都有参与&#xff0c;完成对整个面向对象工程的设计。 CRC卡是一个标准索引卡集合&#xff0c;包括三个部分…

川藏线徒搭

http://www.mafengwo.cn/i/6296156.html

删数问题

Problem Description 键盘输入一个高精度的正整数n&#xff08;≤100位&#xff09;&#xff0c;去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s&#xff0c;寻找一种方案&#xff0c;使得剩下的数字组成的新数最小。Input 输入有多组…

面试70问 经典回答

http://group.cnblogs.com/topic/37628.html

Mybatis整合spring

整合思路 1、SqlSessionFactory对象应该放到spring容器中作为单例存在。 2、传统dao的开发方式中&#xff0c;应该从spring容器中获得sqlsession对象。 3、Mapper代理形式中&#xff0c;应该从spring容器中直接获得mapper的代理对象。 4、数据库的连接以及数据库连接池事务…

最少拦截系统

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹…

云计算的理解

原文&#xff1a;http://www.chinacloud.cn/show.aspx?id15917&cid17 老叟发现&#xff0c;即使是一些搞计算机的人&#xff0c;也不了解“云”是什么。于是&#xff0c;俺卖车之余就写了一篇科普&#xff1a; 到底什么是云(云计算) 有很多关于云的介绍。然而&#xff0c;…

什么是Springmvc以及如果编写第一个入门程序

Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如下图&#xff1a; Springmvc处理流程 入门程序 创建web工程 springMVC是表现层框架&#xff0c;需要搭建web工程开发。 如下图创建动态web工程&#xff1a; 输入…

迷瘴

Problem Description 通过悬崖的yifenfei&#xff0c;又面临着幽谷的考验—— 幽谷周围瘴气弥漫&#xff0c;静的可怕&#xff0c;隐约可见地上堆满了骷髅。由于此处长年不见天日&#xff0c;导致空气中布满了毒素&#xff0c;一旦吸入体内&#xff0c;便会全身溃烂而死。幸好y…

驳斥《沙盒用于数据防泄密是重大技术原理性失误》

http://blog.ifeng.com/article/30786929.html 最近网上出现了一篇名为《沙盒用于数据防泄密是重大技术原理性失误》的文章&#xff0c;经作者鉴定&#xff0c;是某不良公司攻击技术领先的竞争对手苏州深信达公司的软文。该公司为何主动公开攻击竞争对手&#xff0c;可能和最近…

windows驱动开发学习

序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高…

Springmvc架构详解

框架结构 框架结构如下图&#xff1a; 架构流程 1、 用户发送请求至前端控制器DispatcherServlet 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器根据请求url找到具体的处理器&#xff0c;生成处理器对象及处理器拦截器(如果有则生成)一…

区间覆盖问题

用i来表示x坐标轴上坐标为[i-1&#xff0c;i]的长度为1的区间&#xff0c;并给出n&#xff08;1≤n≤200&#xff09;个不同的整数&#xff0c;表示n个这样的区间。 现在要求画m条线段覆盖住所有的区间&#xff0c;条件是&#xff1a;每条线段可以任意长&#xff0c;但是要求所…

Windows驱动开发如何入门

http://blog.csdn.net/charlessimonyi/article/details/50904854 http://blog.csdn.net/charlessimonyi/article/details/50904956

springmvc整合mybatis之准备阶段与文件配置

文章出处&#xff1a;课程资料 web.xml等配置文件的解释&#xff1a;打开博客 为了更好的学习 springmvc和mybatis整合开发的方法&#xff0c;需要将springmvc和mybatis进行整合。 整合目标&#xff1a;控制层采用springmvc、持久层使用mybatis实现。 步骤详解&#xff1a; …

悼念512汶川大地震遇难同胞

Problem Description 时间&#xff1a;2008年5月16日&#xff08;震后第4天&#xff09; 地点&#xff1a;汶川县牛脑寨人物&#xff1a;羌族老奶奶【转载整理】牛脑寨是一个全村600多人的羌族寨子&#xff0c;震后几天&#xff0c;这里依然能常常听到隆隆的声音&#xff0c;那…