项目-功能模块划分

本文详细介绍了高性能服务器的SERVER模块和HTTP协议模块,包括SERVER模块的各个子模块如Buffer、Socket、Channel、Connection、Acceptor、TimerQueue、Poller和EventLoop的职责及工作流程。同时,探讨了HTTP模块如Util、HttpRequest、HttpResponse、HttpContext和HttpServer的实现,以提供协议支持和简化HTTP服务器搭建。
摘要由CSDN通过智能技术生成


前言

基于以上的理解,我们要实现的是⼀个带有协议⽀持的Reactor模型⾼性能服务器,因此将整个项⽬的实现划分为两个⼤的模块:

  • SERVER模块:实现Reactor模型的TCP服务器;
  • 协议模块:对当前的Reactor模型服务器提供应⽤层协议⽀持。

一、SERVER模块

SERVER模块就是对所有的连接以及线程进⾏管理,让它们各司其职,在合适的时候做合适的事,最终完成⾼性能服务器组件的实现。⽽具体的管理也分为三个⽅⾯:

  • 监听连接管理:对监听连接进⾏管理。
  • 通信连接管理:对通信连接进⾏管理。
  • 超时连接管理:对超时连接进⾏管理。

基于以上的管理思想,将这个模块进⾏细致的划分⼜可以划分为以下多个子模块:

Buffer模块

Buffer模块是⼀个缓冲区模块,⽤于实现通信中⽤⼾态的接收缓冲区和发送缓冲区功能。
在这里插入图片描述

Socket模块

Socket模块是对套接字操作封装的⼀个模块,主要实现的socket的各项操作。
在这里插入图片描述

Channel模块

Channel模块是对⼀个描述符需要进⾏的IO事件管理的模块,实现对描述符可读,可写,错误…事件的管理操作,以及Poller模块对描述符进⾏IO事件监控就绪后,根据不同的事件,回调不同的处理函数功能。
在这里插入图片描述

Connection模块

Connection模块是对Buffer模块,Socket模块,Channel模块的⼀个整体封装,实现了对⼀个通信套接字的整体的管理,每⼀个进⾏数据通信的套接字(也就是accept获取到的新连接)都会使⽤Connection进⾏管理。
在这里插入图片描述

  • Connection模块内部包含有三个由组件使⽤者传⼊的回调函数:连接建⽴完成回调,事件回调, 新数据回调,关闭回调。
  • Connection模块内部包含有两个组件使⽤者提供的接⼝:数据发送接⼝,连接关闭接⼝
  • Connection模块内部包含有两个⽤⼾态缓冲区:⽤⼾态接收缓冲区,⽤⼾态发送缓冲区
  • Connection模块内部包含有⼀个Socket对象:完成描述符⾯向系统的IO操作 Connection模块内部包含有⼀个Channel对象:完成描述符IO事件就绪的处理

具体处理流程如下:

  • 实现向Channel提供可读,可写,错误等不同事件的IO事件回调函数,然后将Channel和对应的描述符添加到Poller事件监控中。
  • 当描述符在Poller模块中就绪了IO可读事件,则调⽤描述符对应Channel中保存的读事件处理函数,进⾏数据读取,将socket接收缓冲区全部读取到Connection管理的⽤⼾态接收缓冲区中。然后调⽤由组件使⽤者传⼊的新数据到来回调函数进⾏处理。
  • 组件使⽤者进⾏数据的业务处理完毕后,通过Connection向使⽤者提供的数据发送接⼝,将数据写⼊Connection的发送缓冲区中。
  • 启动描述符在Poll模块中的IO写事件监控,就绪后,调⽤Channel中保存的写事件处理函数,将发送缓冲区中的数据通过Socket进⾏⾯向系统的实际数据发送。

Acceptor模块

Acceptor模块是对Socket模块,Channel模块的⼀个整体封装,实现了对⼀个监听套接字的整体的管理。
在这里插入图片描述

  • Acceptor模块内部包含有⼀个Socket对象:实现监听套接字的操作
  • Acceptor模块内部包含有⼀个Channel对象:实现监听套接字IO事件就绪的处理

具体处理流程如下:

  1. 实现向Channel提供可读事件的IO事件处理回调函数,函数的功能其实也就是获取新连接
  2. 为新连接构建⼀个Connection对象出来。

TimerQueue模块

TimerQueue模块是实现固定时间定时任务的模块,可以理解就是要给定时任务管理器,向定时任务管理器中添加⼀个任务,任务将在固定时间后被执⾏,同时也可以通过刷新定时任务来延迟任务的执⾏。
在这里插入图片描述
这个模块主要是对Connection对象的⽣命周期管理,对⾮活跃连接进⾏超时后的释放功能。
TimerQueue模块内部包含有⼀个timerfd:linux系统提供的定时器。
TimerQueue模块内部包含有⼀个Channel对象:实现对timerfd的IO时间就绪回调处理

Poller模块:

Poller模块是对epoll进⾏封装的⼀个模块,主要实现epoll的IO事件添加,修改,移除,获取活跃连接功能。
在这里插入图片描述

EventLoop模块

EventLoop模块可以理解就是我们上边所说的Reactor模块,它是对Poller模块,TimerQueue模块,Socket模块的⼀个整体封装,进⾏所有描述符的事件监控。
TcpServer
EventLoop模块必然是⼀个对象对应⼀个线程的模块,线程内部的⽬的就是运⾏EventLoop的启动函数。

EventLoop模块为了保证整个服务器的线程安全问题,因此要求使⽤者对于Connection的所有操作⼀定要在其对应的EventLoop线程内完成,不能在其他线程中进⾏(⽐如组件使⽤者使⽤Connection发送数据,以及关闭连接这种操作)。

EventLoop模块保证⾃⼰内部所监控的所有描述符,都要是活跃连接,⾮活跃连接就要及时释放避免资源浪费。

  • EventLoop模块内部包含有⼀个eventfd:eventfd其实就是linux内核提供的⼀个事件fd,专⻔⽤于 事件通知。
  • EventLoop模块内部包含有⼀个Poller对象:⽤于进⾏描述符的IO事件监控。
  • EventLoop模块内部包含有⼀个TimerQueue对象:⽤于进⾏定时任务的管理。
  • EventLoop模块内部包含有⼀个PendingTask队列:组件使⽤者将对Connection进⾏的所有操作,都加⼊到任务队列中,由EventLoop模块进⾏管理,并在EventLoop对应的线程中进⾏执⾏。
  • 每⼀个Connection对象都会绑定到⼀个EventLoop上,这样能保证对这个连接的所有操作都是在 ⼀个线程中完成的。

具体操作流程:

  • 通过Poller模块对当前模块管理内的所有描述符进⾏IO事件监控,有描述符事件就绪后,通过描述符对应的Channel进⾏事件处理。
  • 所有就绪的描述符IO事件处理完毕后,对任务队列中的所有操作顺序进⾏执⾏。
  • 由于epoll的事件监控,有可能会因为没有事件到来⽽持续阻塞,导致任务队列中的任务不能及时得到执⾏,因此创建了eventfd,添加到Poller的事件监控中,⽤于实现每次向任务队列添加任务的时候,通过向eventfd写⼊数据来唤醒epoll的阻塞。

TcpServer模块

这个模块是⼀个整体Tcp服务器模块的封装,内部封装了Acceptor模块,EventLoopThreadPool模块。
在这里插入图片描述

  • TcpServer中包含有⼀个EventLoop对象:以备在超轻量使⽤场景中不需要EventLoop线程池,只需要在主线程中完成所有操作的情况。

  • TcpServer模块内部包含有⼀个EventLoopThreadPool对象:其实就是EventLoop线程池,也就是⼦Reactor线程池。

  • TcpServer模块内部包含有⼀个Acceptor对象:⼀个TcpServer服务器,必然对应有⼀个监听套接字,能够完成获取客⼾端新连接,并处理的任务。

  • TcpServer模块内部包含有⼀个std::shared_ptr的hash表:保存了所有的新建连接对应的Connection,注意,所有的Connection使⽤shared_ptr进⾏管理,这样能够保证在hash表中删除了Connection信息后,在shared_ptr计数器为0的情况下完成对Connection资源的释放操作。

具体操作流程如下:

  1. 在实例化TcpServer对象过程中,完成BaseLoop的设置,Acceptor对象的实例化,以及EventLoop线程池的实例化,以及std::shared_ptr的hash表的实例化。
  2. 为Acceptor对象设置回调函数:获取到新连接后,为新连接构建Connection对象,设置Connection的各项回调,并使⽤shared_ptr进⾏管理,并添加到hash表中进⾏管理,并为Connection选择⼀个EventLoop线程,为Connection添加⼀个定时销毁任务,为Connection添加事件监控
  3. 启动BaseLoop。

模块关系图

在这里插入图片描述

二、HTTP协议模块

HTTP协议模块⽤于对⾼并发服务器模块进⾏协议⽀持,基于提供的协议⽀持能够更⽅便的完成指定协议服务器的搭建。
⽽HTTP协议⽀持模块的实现,可以细分为以下⼏个模块。

Util模块

这个模块是⼀个⼯具模块,主要提供HTTP协议模块所⽤到的⼀些⼯具函数,⽐如url编解码,⽂件读写…等。

HttpRequest模块

这个模块是HTTP请求数据模块,⽤于保存HTTP请求数据被解析后的各项请求元素信息。

HttpResponse模块

这个模块是HTTP响应数据模块,⽤于业务处理后设置并保存HTTP响应数据的的各项元素信息,最终会被按照HTTP协议响应格式组织成为响应信息发送给客⼾端。

HttpContext模块

这个模块是⼀个HTTP请求接收的上下⽂模块,主要是为了防⽌在⼀次接收的数据中,不是⼀个完整的HTTP请求,则解析过程并未完成,⽆法进⾏完整的请求处理,需要在下次接收到新数据后继续根据上下⽂进⾏解析,最终得到⼀个HttpRequest请求信息对象,因此在请求数据的接收以及解析部分需要⼀个上下⽂来进⾏控制接收和处理节奏。

HttpServer模块

这个模块是最终给组件使⽤者提供的HTTP服务器模块了,⽤于以简单的接⼝实现HTTP服务器的搭建。
HttpServer模块内部包含有⼀个TcpServer对象:TcpServer对象实现服务器的搭建。
HttpServer模块内部包含有两个提供给TcpServer对象的接⼝:连接建⽴成功设置上下⽂接⼝,数据处理接⼝。
HttpServer模块内部包含有⼀个hash-map表存储请求与处理函数的映射表:组件使⽤者向HttpServer设置哪些请求应该使⽤哪些函数进⾏处理,等TcpServer收到对应的请求就会使⽤对应的函数进⾏处理。

  • 41
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
5G NR(New Radio)是指第五代移动通信系统的无线空口接入技术,它的物理层功能模块划分如下: 1. 物理层协议数据单元(PDU)处理:物理层 PDU 主要负责将用户数据从上层传输到物理层,并将接收的物理层 PDU 传输给上层。它包括数据的编码、解码、分段、组装和传输控制等功能。 2. 射频接口处理:射频接口处理模块负责将数字信号转换为射频信号,并进行射频信号的放大、滤波、混频和解调等处理。它还负责射频参数的配置和管理,以及功率控制和频谱资源分配等功能。 3. 物理信道处理:物理信道处理模块负责对物理信道进行编码、解码、分组、映射和信道编码等处理。它还负责信道的调度和多路复用等功能,以便实现多用户同时传输。 4. 调制解调处理:调制解调处理模块负责对数字信号进行调制和解调。它将物理层 PDU 转换成无线信号进行发送,并将接收到的无线信号解调成数字信号。它还包括信号的频率偏移和时钟同步等功能。 5. 多路径干扰和信道衰落处理:多路径干扰和信道衰落处理模块负责对多径干扰和信道衰落进行估计和补偿。它通过信道估计和均衡等技术,降低信号传输的误码率和干扰。 6. 频谱资源分配:频谱资源分配模块负责对可用的频谱资源进行分配和管理。它根据网络负载和用户需求,动态地分配频谱资源,以优化系统性能和用户体验。 总之,5G NR的物理层功能模块划分涵盖了数据处理、射频接口处理、物理信道处理、调制解调处理、多路径干扰和信道衰落处理以及频谱资源分配等关键功能,以实现高速率、低时延和大容量的无线通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值