1.协议包含:
方法名,url,协议版本:请求行/状态行:协议版本,状态码,状态码描述
框架路由实际上就是为URL匹配对应的处理函数(Handlers)
静态路由:/a/b/c、la/b/d
参数路由:/a/:id/c (/a/b/c,/a/d/c)、/*all
路由修复:/a/b <-> /a/b/
冲突路由以及优先级:/a/b、l:id/c
匹配 HTTP 方法
多处理函数:方便添加中间件
如何实现添加多处理函数:
在每个节点上使用一个list存储handler
2.常见方法名:GET HEAD POST PUT(完整更新) DELETE CONNECT OPTIONS TRACE PATCH(部分更新)
状态码:
1xx:信息类
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
3.应用层:和用户直接打交道,对请求进行抽象,也会提供API
中间件层:对用户进行预处理,后处理
路由层:注册,选址
协议层:实现对应抽象接口
传输层:主要在网络层
4.中间件:
h.Use()方法用来在http服务器中
注册中间件函数。这些函数会在请求处理之前/之后执行。
调用h.Use()注册后,这个中间件会应用到服务器h处理的所有请求上。
Next()预处理后处理统一写在这里
5.go net
流式友好
小包性能高
netpoll
中大包性能高
时延低
6.针对协议相关的Headers 快速解析:
通过 Header key 首字母快速筛除掉完全不可能的key
解析对应value 到独立字段
使用 byte slice 管理对应header 存储,方便复用
function(ctx *RequestContext) Next(){
ctx.index++
for ctx.index<int8(len(ctx.handlers)){
ctx.handlers[ctx.index]()
ctx.index++
}
}