Google app engine 运行Go 1.6的托管VM在维护HTTP/2客户端时出现问题

Google app engine 运行Go 1.6的托管VM在维护HTTP/2客户端时出现问题,google-app-engine,go,google-compute-engine,google-managed-vm,Google App Engine,Go,Google Compute Engine,Google Managed Vm,我正试图使用苹果的HTTP/2 API向APNS服务发送请求,我的服务在本地运行良好,但一旦在托管虚拟机上运行,几分钟后底层套接字似乎就消失了,Go HTTP库无法正常处理它 我看到的是,请求在一段时间内工作正常(得到响应),但如果空闲几分钟,连接将需要几分钟才能超时,因为read tcp 172.17.0.4:35395->17.172.234.19:443:read:connection timed out(显然忽略了我指定的10秒超时) 我以前在托管虚拟机上遇到过“保持活动”的问题,但谷歌

我正试图使用苹果的HTTP/2 API向APNS服务发送请求,我的服务在本地运行良好,但一旦在托管虚拟机上运行,几分钟后底层套接字似乎就消失了,Go HTTP库无法正常处理它

我看到的是,请求在一段时间内工作正常(得到响应),但如果空闲几分钟,连接将需要几分钟才能超时,因为
read tcp 172.17.0.4:35395->17.172.234.19:443:read:connection timed out
(显然忽略了我指定的10秒超时)

我以前在托管虚拟机上遇到过“保持活动”的问题,但谷歌表示应该予以修复。有人知道如何避免这个问题吗

我正在以以下方式创建HTTP/2客户端:

func NewClient() *http.Client {
    cert, err := tls.LoadX509KeyPair("secrets/prod_voip.pem", "secrets/prod_voip.key")
    if err != nil {
        log.Fatalln(err)
    }
    config := &tls.Config{
        Certificates: []tls.Certificate{cert},
    }
    config.BuildNameToCertificate()
    dialer := &net.Dialer{
        Timeout: 10 * time.Second,
    }
    transport := &http.Transport{
        Dial:            dialer.Dial,
        TLSClientConfig: config,
    }
    // Explicitly enable HTTP/2 as TLS-configured clients don't auto-upgrade.
    // See: https://github.com/golang/go/issues/14275
    if err := http2.ConfigureTransport(transport); err != nil {
        log.Fatalln(err)
    }
    return &http.Client{Transport: transport}
}