在“google.golang.org/ grpc /code”中引入了一些错误,一些错误可以由grpc生成,有些不能生成,grpc流应该对应于http2.0中的流。然后,我想知道这是否意味着当那些grpc流抛出异常时TCP连接有错误,所以我只需要重新连接TCP连接,还是我有一些只用于重新连接流的方法(例如重新连接流,等等)。
for {
request, err3 := stream.Recv()
if err3 == io.EOF {
return nil
}
if err3 != nil {
return err3 // how can i handle this error (grpc generated)
}
do something
}发布于 2022-07-28 10:05:27
gRPC-go为您处理网络级别的重新连接:https://pkg.go.dev/google.golang.org/grpc#ClientConn
A ClientConn封装了一系列功能,包括名称解析、TCP建立(通过重试和退避)和TLS握手。它还通过重新解析名称和重新连接来处理已建立连接上的错误。
如果错误返回一个错误并且不是io.EOF类型,这意味着出了问题(包括网络错误),您必须请求一个新的流:https://github.com/grpc/grpc-go/blob/master/stream.go#L126,但是您不必担心创建一个新的TCP连接。
RecvMsg阻塞,直到它接收到m中的消息或完成流。当流成功完成时,它返回io.EOF。对于任何其他错误,流将被中止,并且错误包含RPC状态。
如果它不能得到一个新的流,意味着它不能连接到服务器,或者它有什么问题,但是如果它是一个短暂的网络错误,您最终将能够得到一个新的流。
https://stackoverflow.com/questions/73150796
复制相似问题