HTTP协议是什么
HTTP超文本传输协议(Hypertext Transfer Protocol) 传统,只传输文本
超文本:在 传统的基础上能传输更多的类型,如:视频,图片等资源,就叫超文本。
- 为什么需要协议 需要明确的边界
- 协议开始
- 协议结束
能够携带信息
- 什么信息
- 信息类型
HTTP的不足与展望
HTTP的分层设计
应用层设计
- 提供合理的API
- 可理解性:如ctx.getBody().
- 简单性:如 ctx.getRequest.Header.Peek(key).
- 冗余性
- 兼容性(可以在各种不同的环境中使用).
- 可测性(保证是可以测试的).
- 可见性
中间件层
- 中间件需求:
- 配合Handler实现一个完整的请求处理生命周期。
- 拥有预处理逻辑与后处理逻辑。
- 可以注册多中间件。
- 对上层模块用户逻辑模块易用。
洋葱模型
- 路由设计
框架路由实际上就是为URL匹配对应的处理函数(Handlers):
- 静态路由:/a/b/c,/a/b/d
- 参数路由;/a/:id/c
- 路由修复:/a/b <->/a/b/
- 冲突路由以及优先级:/a/b、/:id/c
- 匹配HTTP方法
- 多出力函数:方便添加中间件
- ...
- 如何做设计
- 明确需求:考虑清楚要解决什么问题,有哪些需求。
- 业界调研:业界都有哪些解决方案可供参考。
- 方案权衡:思考不同方案的取舍。
- 方案评审:相关人员对不同方案做评审。
- 确定开发:确定最适合的方案进行开发。
- 协议层设计
抽象出合适的接口:
- 网络层设计
-
BIO(阻塞IO):同步操作
-
NIO(非阻塞IO):异步操作
针对协议的优化
找到Header Line 边界:\r\n 先找到\n再看它前一个是不是\r
更快的算法:SIMD(Single Instruction Multiple Data)即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。