Golang gRPC 连接客户端错误 - “错误读取服务器前言:http2:框架太大”

问题描述 投票:0回答:2

我正在写一个go客户端来消费

conn, err := grpc.DialContext(ctx, serverAddr, grpc.WithBlock(), grpc.WithReturnConnectionError(), getTransportCredential(false))

上面的调用会挂起,直到上下文超时并返回以下错误

failed to dial: context deadline exceeded: connection error: desc = "error reading server preface: http2: frame too large"

getTransportCredential(insecure bool)
定义如下

func getTransportCredential(insecure bool) grpc.DialOption {
    if insecure {
        return grpc.WithTransportCredentials(insecure2.NewCredentials())
    }

    rootCAs, err := x509.SystemCertPool()
    if err != nil {
        panic(err)
    }
    if rootCAs == nil {
        fmt.Println("SystemCertPool is nil")
        rootCAs = x509.NewCertPool()
    }

    caCert := `-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----`

    if caCert != "" {
        // Append our cert to the system pool
        if ok := rootCAs.AppendCertsFromPEM([]byte(caCert)); !ok {
            fmt.Println("Couldn't add cert to the cert pool")
        }
    }

    creds := credentials.NewClientTLSFromCert(rootCAs, "")
    fmt.Printf("%+v\n", creds.Info())
    return grpc.WithTransportCredentials(creds)
}

你能帮我解决这个问题吗?

我可以

grpcurl
从我的机器到服务器并获得成功的响应。

go google-cloud-platform grpc google-cloud-run http2
2个回答
2
投票

http/2 的最大帧大小为 2^14 (16384)enter image description here 你需要减少自己的负载,

参考:https://www.rfc-editor.org/rfc/rfc7540#page-12,第76页


0
投票

也许您正在尝试使用 grpc 连接到 http 网关 当我混淆 grpc 和 http 端口时,我遇到了这个问题

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.