HTTP协议
课程背景
0.9最初版本,从1991年开始
HTTP协议是什么
超文本传输协议(超文本见到那理解就是超过文本数据的数据)
文字——>图片,视频
需要明确的边界:
协议开始
协议元数据
Text
协议结束
什么是对头阻塞?
对头阻塞(Head-of-Line Blocking,简称HOL Blocking)是一种在网络通信和数据传输中常见的问题,特别是在队列系统中。具体来说,当多个数据包或事务按照一定的顺序进入一个队列时,如果队列前端的数据包或事务由于某种原因(如丢失、错误或处理延迟)无法及时被处理,那么后续的所有数据包或事务也会被阻塞,即使它们本身是可以立即处理的。
常见场景
- 网络传输:在TCP/IP协议中,如果一个数据包丢失或延迟,后续的数据包即使到达了接收端也无法被处理,因为TCP需要按序接收数据包。
- 计算机系统:在操作系统中,如果一个进程或线程在队列的前端被阻塞,那么后续的进程或线程也会被阻塞,即使它们本身已经准备好运行。
- 数据库系统:在数据库事务处理中,如果一个事务在队列的前端被阻塞,那么后续的事务也会被阻塞,即使它们之间没有依赖关系。
解决方法
- 重传机制:在网络传输中,可以通过重传丢失的数据包来解决对头阻塞问题。
- 优先级队列:使用优先级队列,将高优先级的数据包或事务优先处理。
- 并行处理:在某些情况下,可以通过并行处理多个数据包或事务来减少对头阻塞的影响。
- 流量控制:通过流量控制机制,减少数据包的拥塞,从而减少对头阻塞的发生。
分层设计
分层设计应该注意:
提供合理的API
可理解性:API的名字应该是看起来就可以知道是什么作用的
简单性:越短越好
冗余性:不要那种两个接口拼接起来的接口
兼容性:接口与接口之间应该是相互兼容的
可测性:接口应该是可测试的
可见性:就是接口里面的一些东西都应该是有权限的,不应该是用户也可以对里面的东西进行操作的
不要在文档里说明,很多用户不看文档
中间件的引入
假设我们需要给每一个接口打印他的request,还有response,中间件,就可以帮助我们实现所有接口的打印
中间件的设计
1,既然要实现预处理还有后处理,那这个就像是调用了一个函数
,为了和普通函数做一个区分,我们可以将中间件都定义成Next
2,假设用户不去调用初始化函数怎么办,那么就在中间件里面加上,用户自增长
3,出现异常想停止怎么办
因为有的中间件只能调用一个栈,所以有的时候需要我们手动去调用中间件
路由设计
我们可以设计路由树:我么可以设计路由树来实现路由的筛选分支