Gorilla
Gorilla context
context存储在request整个生命周期的数据存储。
http.request
中封装了一个context.Context
。
Gorilla 的context提供的一种对http.request
中的context.Context
的set,get,delete的支持。
Gorilla http or http/client
http high level的API
http
http中封装一个一个DefaultClient
提供了Post,Get,Delete等请求,值需要把对应请求的内容写入即可。
最终调用的是DefaultClinet的Get和Post方法
Client
Client 对外提供的方法肯定是作为一个http client需要提供的方法,比如Get,Put,等等。
但是其中的与http server的conn,以及通过conn进行发送request和接受response,
应该是封装起来的。
Client中用于维护Conn的是Dialer,Dialer的功能是负责获得一个对应的Conn。
所以每一个Dialer实例都是可以维护多个addr对应的多个Conn,因为一个Conn只能交给一个线程
去使用,所有Dialer中需要维护Conn的安全性,不能把同一个Conn交给不同的线程使用。
重点:Dialer的实现其实就是一个Conn pool,pool中一个addr对应的是多个Conn同时存在。
所以Dialer要维护对同一个addr的Conn的get和release的操作(从pool中拿去,返回pool中)
工具类:提供将非结构化的数据转化为request,和将response转化为非结构化的数据的功能。
同样的功能需要提供给header
Conn
Conn是一个接口,其提供的就是与http server进行真正网络通信的结构体。
并且提供了对request和response的解析方法,以及对本身Conn的释放的功能。
Conn的实现是对 net/conn 进行了封装,进行网络通信的内容
Dial
提供获得Conn的方法,以及对Conn进行管理
http/client low level api
设计的比较精细,就不仔细看了
Gorilla mux
实现Request的router和dispatch功能
网友评论