go的http

服务端

Handler 是一个interface,定义了 ServeHTTP。该方法的作用是,根据http的path映射到handler

ServeMux 是对Handler 的具体实现,其内部通过Map 维护了一个从path到handler的映射关系

muxEntry 为一个handler单元,内部包含了请求路径 path+处理函数handler

HandlerFunc 是 func (ResponseWriter,*Request) 的类型,其实现了 ServeHTTP

http.ListenAndServe -> server.LisntenAndServe -> net.Listen -> l.accept -> 开启go协程,异步处理请求 ->根据request 中的url匹配对应的 handler ->response

客户端

client

request

1
2
3
4
5
6
7
8
9
10
type Request struct{
Method string
URL *url.URL
Header Header
Body io.ReadCloser
Host string
Form url.Values
Response *Response
ctx context.Context
}

response

1
2
3
4
5
6
7
8
type Response struct{
StatusCode int
Proto string
Header Header
Body io.ReadCloser
Request *Request
//...
}

请求的过程:

  • 构造http请求参数
  • 获取用于与服务端交互的TCP连接
  • 通过TCP链接发送请求参数
  • 通过TCP连接收到相应

todo: 钻研 readChannel 和WriteChannel 两个携程以及一个request的主协程的交互过程

ref:

Golang HTTP 标准库实现原理 (qq.com)


go的http
http://example.com/2024/05/04/go的http/
作者
Forrest
发布于
2024年5月4日
许可协议