基础知识个人小记4 | 青训营

60 阅读2分钟
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 存储,方便复用
//不调用Next:初始化逻辑且不需要再同一调用栈
//调用Next:后处理逻辑或需要在同一调用栈上
function(ctx *RequestContext) Next(){
    ctx.index++
    for ctx.index<int8(len(ctx.handlers)){
        ctx.handlers[ctx.index]()
        ctx.index++
    }
}