可信赖的南昌网站建设,广州企业网站推广策划方案,免费图表制作网站,潍坊在线网站建设文章目录 一、实现目标二、前置知识#xff08;一#xff09;HTTP服务器1.概念 #xff08;二#xff09;Reactor模型#xff1a;1.概念2.分类#xff08;1#xff09;单Reactor单线程#xff1a;单I/O多路复用业务处理。#xff08;2#xff09;单Reactor多线程一HTTP服务器1.概念 二Reactor模型1.概念2.分类1单Reactor单线程单I/O多路复用业务处理。2单Reactor多线程单I/O多路复⽤线程池业务处理 三目标定位-One Thread One Loop主从Reactor模型高并发服务器 三、功能划分一SERVER模块1.Buffer模块2.Socket模块3.Channel模块4.Connection模块 仿mudou库one thread oneloop式并发服务器实现 一、实现目标
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器 通过咱们实现的高并发服务器组件可以简洁快速的完成⼀个高性能的服务器搭建。 并且通过组件内提供的不同应⽤层协议支持也可以快速完成⼀个高性能应⽤服务器的搭建当前 为了便于项目的演示项目中提供HTTP协议组件的⽀持。 在这里要明确的是咱们要实现的是⼀个高并发服务器组件因此当前的项目中并不包含实际的业务 内容。
二、前置知识
一HTTP服务器
1.概念
HTTPHyper Text Transfer Protocol超⽂本传输协议是应⽤层协议是⼀种简单的请求-响应协 议客户端根据自己的需要向服务器发送请求服务器针对请求提供服务完毕后通信结束。 协议细节在课堂上已经讲过这⾥不再赘述。 但是需要注意的是HTTP协议是⼀个运行在TCP协议之上的应用层协议这⼀点本质上是告诉我们HTTP服务器其实就是个TCP服务器只不过在应用层基于HTTP协议格式进行数据的组织和解析来明确客⼾端的请求并完成业务处理。
因此实现HTTP服务器简单理解只需要以下几步即可
搭建⼀个TCP服务器接收客户端请求。以HTTP协议格式进行解析请求数据明确客户端目的。明确客户端请求目的后提供对应服务。将服务结果⼀HTTP协议格式进行组织发送给客户端实现⼀个HTTP服务器很简单但是实现⼀个高性能的服务器并不简单这个单元中将讲解基于Reactor模式的高性能服务器实现。
当然准确来说因为我们要实现的服务器本身并不存在业务咱们要实现的应该算是⼀个高性能服务器基础库是⼀个基础组件。
二Reactor模型
1.概念
Reactor模式是指通过⼀个或多个输入同时传递给服务器进行请求处理时的事件驱动处理模式。 服务端程序处理传入多路请求并将它们同步分派给请求对应的处理线程Reactor 模式也叫Dispatcher模式。简单理解就是使⽤ I/O多路复用 统⼀监听事件收到事件后分发给处理进程或线程是编写高性能网络服务器的必备技术之⼀。
2.分类
1单Reactor单线程单I/O多路复用业务处理。
通过IO多路复用模型进行客户端请求监控。触发事件后进行事件处理。a. 如果是新建连接请求则获取新建连接并添加至多路复用模型进行事件监控。 b. 如果是数据通信请求则进行对应数据处理接收数据处理数据发送响应。
优点所有操作均在同⼀线程中完成思想流程较为简单不涉及进程/线程间通信及资源争抢问题。 缺点无法有效利用CPU多核资源很容易达到性能瓶颈。 适用场景适用于客户端数量较少且处理速度较为快速的场景。处理较慢或活跃连接较多会导 致串行处理的情况下后处理的连接长时间无法得到响应。
2单Reactor多线程单I/O多路复⽤线程池业务处理
Reactor线程通过I/O多路复用模型进行客户端请求监控触发事件后进行事件处理 a. 如果是新建连接请求则获取新建连接并添加至多路复用模型进行事件监控。 b. 如果是数据通信请求则接收数据后分发给Worker线程池进行业务处理。 c. 工作线程处理完毕后将响应交给Reactor线程进行数据响应 优点充分利用CPU多核资源 加粗样式缺点多线程间的数据共享访问控制较为复杂单个Reactor 承担所有事件的监听和响应在单线程中 运行高并发场景下容易成为性能瓶颈。 多Reactor多线程多I/O多路复用线程池业务处理在主Reactor中处理新连接请求事件有新连接到来则分发到子Reactor中监控在子Reactor中进行客户端通信监控有事件触发则接收数据分发给Worker线程池Worker线程池分配独立的线程进行具体的业务处理 a. 工作线程处理完毕后将响应交给子Reactor线程进行数据响应 优点充分利用CPU多核资源主从Reactor各司其职
三目标定位-One Thread One Loop主从Reactor模型高并发服务器
咱们要实现的是主从Reactor模型服务器也就是主Reactor线程仅仅监控监听描述符获取新建连 接保证获取新连接的高效性提高服务器的并发性能。 主Reactor获取到新连接后分发给子Reactor进行通信事件监控。而子Reactor线程监控各自的描述符的 读写事件进行数据读写以及业务处理。
One Thread One Loop的思想就是把所有的操作都放到⼀个线程中进行⼀个线程对应⼀个事件处理 的循环。 当前实现中因为并不确定组件使用者的使用意向因此并不提供业务层工作线程池的实现只实现 主从Reactor而Worker工作线程池可由组件库的使用者的需要自行决定是否使用和实现。
三、功能划分
基于以上的理解我们要实现的是⼀个带有协议支持的Reactor模型高性能服务器因此将整个项目的 实现划分为两个大的模块
• SERVER模块实现Reactor模型的TCP服务器 • 协议模块对当前的Reactor模型服务器提供应用层协议支持
一SERVER模块
SERVER模块就是对所有的连接以及线程进行管理让它们各司其职在合适的时候做合适的事最终 完成高性能服务器组件的实现 而具体的管理也分为三个方面 • 监听连接管理对监听连接进行管理。 • 通信连接管理对通信连接进行管理。 • 超时连接管理对超时连接进行管理。 基于以上的管理思想将这个模块进行细致的划分又可以划分为以下多个子模块
1.Buffer模块
Buffer模块是⼀个缓冲区模块用于实现通信中用户态的接收缓冲区和发送缓冲区功能。
2.Socket模块
Socket模块是对套接字操作封装的⼀个模块主要实现的socket的各项操作。
3.Channel模块
Channel模块是对⼀个描述符需要进行的IO事件管理的模块实现对描述符可读可写错误…事件的 管理操作以及Poller模块对描述符进行IO事件监控就绪后根据不同的事件回调不同的处理函数功 能。
4.Connection模块
Connection模块是对Buffer模块Socket模块Channel模块的⼀个整体封装实现了对一个通信套 接字的整体的管理每一个进行数据通信的套接字也就是accept获取到的新连接都会使用 Connection进行管理。 • Connection模块内部包含有三个由组件使用者传入的回调函数连接建立完成回调事件回调 新数据回调关闭回调。 • Connection模块内部包含有两个组件使用者提供的接口数据发送接口连接关闭接口 • Connection模块内部包含有两个用户态缓冲区用户态接收缓冲区用户态发送缓冲区 • Connection模块内部包含有⼀个Socket对象完成描述符面向系统的IO操作 • Connection模块内部包含有⼀个Channel对象完成描述符IO事件就绪的处理