Go语言 调试gRPC拨号中的连接问题

wj8zmpe1  于 2023-03-10  发布在  Go
关注(0)|答案(1)|浏览(322)

我正在尝试建立一个到服务器的gRPC连接。在我的客户端代码(go version:go1.13达尔文/amd 64),我已经

conn, err = grpc.DialContext(ctx, c.tiProxyURL, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithBackoffMaxDelay(10*time.Second))

这会阻塞代码,因为连接由于某种原因没有建立。有没有办法进一步调试这个问题,找出连接的问题是什么?
当我在本地计算机上运行服务器代码时,连接就建立起来了,但是当我试图通过入口URL连接到部署在云中的服务时,连接就被阻塞了。

f0brbegy

f0brbegy1#

如果你能在本地复制并使用IDE,我想断点可以帮助你。
但如果没有,我会建议:
1.尝试在上下文中添加超时以避免它永远阻塞
1.在TLS配置中使用InsecureSkipVerify。在我的情况下,它挂起是由于禁用了安全传输层上的传输安全性。

示例:

ctx, cancel := context.WithTimeout(ctx, time.Second*5)
defer cancel()
config := &tls.Config{
  InsecureSkipVerify: true,
}
tlsCredential := credentials.NewTLS(config)
conn, err := grpc.DialContext(ctx, c.tiProxyURL, tlsCredential, grpc.WithBlock(), grpc.WithBackoffMaxDelay(10*time.Second))

**注意:**将InsecureSkipVerify设置为true会带来安全风险。建议仅用于调试目的或仅在可靠的网络上使用。
参考:

// InsecureSkipVerify controls whether a client verifies the server's
    // certificate chain and host name. If InsecureSkipVerify is true, crypto/tls
    // accepts any certificate presented by the server and any host name in that
    // certificate. In this mode, TLS is susceptible to machine-in-the-middle
    // attacks unless custom verification is used. This should be used only for
    // testing or in combination with VerifyConnection or VerifyPeerCertificate.
    InsecureSkipVerify bool

相关问题