010 仿muduo实现高性能服务器组件_Http协议模块

​🌈个人主页:Fan_558
🔥 系列专栏:仿muduo
📒代码仓库: 项目代码
🌹关注我💪🏻带你学更多知识

前言

HTTP协议模块⽤于对⾼并发服务器模块进⾏协议⽀持,基于提供的协议⽀持能够更⽅便的完成指定协议服务器的搭建

Util模块

设计意义

该模块提供一些功能性接口,用于更好地解析和处理HTTP格式数据的请求行,请求报头,以及文件操作,获取文件类型等

整体设计

URL中,我们的一个资源路径和我们的查询字符串里面可能会有 一些特殊字符,这些特殊字符又会跟我们的url中的特殊字符产生一些 歧义,如果有特殊字符就需要url编码,传递给对方就需要解码 通过HTTP状态码获取描述信息 通过后缀名获取mime,这个mime就是客户端请求的资源型文件,资源型 文件是怎么样的格式,比如html,jpg

在这里插入图片描述

代码如下

在这里插入图片描述

在这里插入图片描述

HttpRequest模块

HttpRequest模块与HttpResponse模块模块的设计功能是相似的,为了更好的进行数据解析以及数据的发送,如果你要对数据解析,则需要把数据读取出来,然后将读取的数据构造出一个完整的HTTP格式的请求对象,通过对请求的业务逻辑处理,同时构建出一个完整的HTTP格式的响应对象,最后将响应对象序列化之后发送回对方 在数据解析处理以及返回的过程中会涉及到HTTP格式的请求和相应的处理,所以我们需要这两个类分别构造出HTTP格式的请求和响应对象,方便我们处理数据

请求报文的构成
在这里插入图片描述
在这里插入图片描述
解析其实就是从缓冲区取出一行行数据,然后根据分隔符或条件将一行数据划分填充到HttpRequest中的_method(请求方法) _path(资源路径) _version(协议版本) _body(请求正文) _matches(资源路径的正则提取数据) _headers(头部字段) _params(查询字符串)字段中

代码如下

在这里插入图片描述

HttpResponse模块

跟HttpRequest模块的设计类似,这里不再过多赘述
响应报文的构成
在这里插入图片描述
在这里插入图片描述

代码如下

在这里插入图片描述

HttpReqCtx模块

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

代码如下

在这里插入图片描述

HttpServer模块

关于HttpServer模块的分析也放到项目整体分析流程中了,这里不再多赘述
在这里插入图片描述

代码如下

在这里插入图片描述

项目整体分析流程

还有些细节需要看server模块分析流程,建议先看完上一篇中的流程分析戳此跳转

具体流程:该项目要实现的是主从reactor 模型服务器,当主reactor 线程获取到新连接后将新连接分发给从属reactor 线程,从属reactor 线程启动可读事件监控,等待客户端发送数据,当执行可读事件回调时会将 socket 中的数据放入到接收缓冲区当中,当接收缓冲区中的数据大于0时,执行处理缓冲区数据的回调,即从接收缓冲区中取出一行行数据并分割填充到 HttpRequest 中对应要素中,接着进行业务处理,看看是对静态资源的请求处理还是功能性请求处理,最后将 HttpResponse,进行组织,然后将 HttpRespons、中数据放入到发送缓冲区当中并启动写事件监控,执行可写事件的回调将发送缓冲区的数据进行发送给客户端,发送完毕后释放连接
在这里插入图片描述

小结

该项目就到此结束啦,如果你存在疑问,欢迎在评论区中留言呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fan_558

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值