HTTP 框架修炼之道学习笔记 | 青训营

56 阅读2分钟

HTTP协议基础

HTTP协议是超文本传输协议,超文本不仅仅包括文本,还包括了图片、视频、文本等等格式。HTTP协议是对这些数据传输的传输规范。 HTTP协议的要求:

  1. 需要明确的边界,包括开始和结束
  2. 需要标明消息类型 捕获.PNG
  • 第一行是请求行/状态行,是对当前HTTP版本的表示。请求行包括方法名,URL,协议版本。状态行包括协议版本,状态码和状态码情况
  • 接下来是协议的源数据
  • 最后一行是有效的数据 HTTP请求流程
package main

import (
    "context"
    "code. byted . org/middleware/hertz/ pkg/app"
    "code . byted.org/middleware/ hertz/ pkg/app/server"
func main() {
    h := server . New( )
    h.POST( "/sis ",func(c context.Context,ctx *app.RequestContext){
    ctx.Data(200"text/plain; charset=utf-8",[]byte( "OK""))
    })
h.Spin( )
}

请求流程包括业务层,服务治理层中间件层,路由层,协议编码层,传输层 HTTP不足与展望

  • HTTP1
  1. 队头阻塞
  2. 传输效率低
  3. 明文传输不安全
  • HTTP2
  1. 多路复用
  2. 头部压缩
  3. 二进制协议
  • QUIC
  1. 基于UDP实现
  2. 解决队头阻塞加密减少握手次数
  3. 支持快速启动

2.HTTP框架设计与实现

  • 分层设计 高内聚 低耦合 易复用 高拓展性
  • 应用层设计 提供合理的API可理解性、简单性、冗余性、兼容性、可测性、可见性
  • 中间件层 ·配合Handler实现一个完整的请求处理生命周期·拥有预处理逻辑与后处理逻辑 ·可以注册多中间件 ·对上层模块用户逻辑模块易用
  • 路由设计 框架路由实际上就是为URL匹配对应的处理函数

捕获2.PNG

  • 协议层 抽象出合适的接口
type Server interface i
Serve( c context.Context,conn network.Conn ) error3 }
  • 网络层设计 BIO/NIO BIO:没有数据会导致数据堵住 NIO:具有一个监听器,当听到有足够的数据,则进行下一步连接。

性能优化

  1. 针对网络库的优化:绑定一块缓冲区,存下全部的Header,拷贝出完整的Body
  2. 对协议的优化:针对Headers的快速解析;Header key的规范化
  3. 热点资源池化