1

HTTP/2 API を使用して Apple の APNS サービスにリクエストを送信しようとしています。私のサービスはローカルでは正常に動作していますが、マネージド VM 上にあると、基盤となるソケットが数分後に停止しているように見え、Go HTTP ライブラリが優雅に扱うことはできません。

私が見ているのは、しばらくの間、リクエストが正常に機能している(応答を取得している)ことですが、数分間アイドル状態の場合、接続がタイムアウトするのに数分かかりますread tcp 172.17.0.4:35395->17.172.234.19:443: read: connection timed out(指定した10秒のタイムアウトを無視しているようです)。

特にマネージド VM でキープアライブの問題が発生したことがありますが、Google は修正する必要があると指摘しています。この問題を回避する方法を知っている人はいますか?

この方法で 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}
}
4

0 に答える 0