我已经实现了http反向代理中间件,它与Gin框架应用程序一起使用:
app := gin.New()
app.Use(proxy.ReverseProxy("127.0.0.1:8008")) // HERE I'm attaching ReverseProxy middleware
在里面
ReverseProxy
我正在创建的实例的方法
httputil.ReverseProxy
需要
transport
来自已在期间初始化
init()
变量
var transport *http.Transport
func init() { // HERE creating instance of Transport
transport = &http.Transport{
// some params
}
}
func ReverseProxy(targetServer string) gin.HandlerFunc {
return func(c *gin.Context) {
proxy := &httputil.ReverseProxy{
Transport: transport, // HERE reusing instance of Transport
// some params
}
proxy.ServeHTTP(c.Writer, c.Request)
}
}
所以问题:
有一个实例正确吗
http.Transport
并在中重复使用
httputil。反向代理
或者我必须根据每个请求创建新的传输?
func ReverseProxy(targetServer string) gin.HandlerFunc {
return func(c *gin.Context) {
// HERE creating instance of Transport
transport = &http.Transport{
// some params
}
proxy := &httputil.ReverseProxy{
Transport: transport, // HERE using NEW instance of Transport
// some params
}
proxy.ServeHTTP(c.Writer, c.Request)
}
}
哪种方式最好?
我目前重用传输,因为我的性能得到了提升,看起来它使用了已经创建的tcp连接。
但在高负载的情况下,我不确定它将如何操作,它会向无关的客户端返回无关的响应吗?
Link to sources