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 |
|
response
1 |
|
请求的过程:
- 构造http请求参数
- 获取用于与服务端交互的TCP连接
- 通过TCP链接发送请求参数
- 通过TCP连接收到相应
todo: 钻研 readChannel 和WriteChannel 两个携程以及一个request的主协程的交互过程
ref:
go的http
http://example.com/2024/05/04/go的http/