代码之家  ›  专栏  ›  技术社区  ›  reticentroot

对Go的HTTP2实现感到困惑

  •  0
  • reticentroot  · 技术社区  · 8 年前

    我在SSL上运行大量的流量。我正在考虑通过使用http2客户机来加速这些呼叫。不过,我还是犹豫了一下,因为我感觉自己对它的行为控制得更少了。

    这里是一个使用go的基本net/http的生产客户机

    ClientHTTP := &http.Client{
        Transport: &http.Transport{
            Proxy: http.ProxyFromEnvironment,
            Dial: (&net.Dialer{
                Timeout:   timeout * time.Second,
                KeepAlive: 1 * time.Minute,
            }).Dial,
            TLSHandshakeTimeout: timeout * time.Second,
            MaxIdleConns:        3000,
            MaxIdleConnsPerHost: 3000,
            IdleConnTimeout:     60 * time.Second,
        },
        Timeout: timeout * time.Second,
    }
    

    据我所知,我对运输的控制力大大降低了。

    ClientHTTP2 := &http.Client{
        Transport: &http2.Transport{
            AllowHTTP: true,
        },
        Timeout: timeout * time.Second,
    }
    

    我有什么东西不见了吗?HTTP2生产准备好了吗?我知道http2使用一个TCP连接,因此池之类的东西会消失。但不知何故,它感觉不完整。这些行为是否与生产客户相同?有更好的实施方法吗 ClientHTTP2 最后, AllowHTTP 似乎什么都没做。在可能有HTTP调用的情况下,我认为我可以安全地调用它,但是它出错了。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Peter saif iqbal    8 年前

    http.Transport

    package main
    
    import (
            "fmt"
            "net"
            "net/http"
            "net/http/httputil"
            "time"
    )
    
    func main() {
            c := &http.Client{
                    Transport: &http.Transport{
                            Proxy: http.ProxyFromEnvironment,
                            DialContext: (&net.Dialer{ // use DialContext here
                                    Timeout:   10 * time.Second,
                                    KeepAlive: 1 * time.Minute,
                            }).DialContext,
                            TLSHandshakeTimeout: 10 * time.Second,
                            MaxIdleConns:        3000,
                            MaxIdleConnsPerHost: 3000,
                            IdleConnTimeout:     60 * time.Second,
                    },
                    Timeout: 1 * time.Second,
            }
            res, _ := c.Get("https://http2.akamai.com/")
            b, _ := httputil.DumpResponse(res, false)
            fmt.Println(string(b))
    }
    
    // HTTP/2.0 200 OK
    // Content-Length: 11928
    // Accept-Ch: DPR, Width, Viewport-Width, Downlink, Save-Data
    // Access-Control-Allow-Credentials: false
    // ...