Google app engine 运行Go 1.6的托管VM在维护HTTP/2客户端时出现问题
我正试图使用苹果的HTTP/2 API向APNS服务发送请求,我的服务在本地运行良好,但一旦在托管虚拟机上运行,几分钟后底层套接字似乎就消失了,Go HTTP库无法正常处理它 我看到的是,请求在一段时间内工作正常(得到响应),但如果空闲几分钟,连接将需要几分钟才能超时,因为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秒超时) 我以前在托管虚拟机上遇到过“保持活动”的问题,但谷歌
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}
}