我已经实现了与 Gin 框架应用程序一起使用的 http 反向代理中间件:
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.ReverseProxy,或者我必须根据每个请求创建新的传输?
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 连接。但是在高负载的情况下,我不确定它会如何行动,它会向不相关的客户端返回不相关的响应吗?
元芳怎么了
相关分类