gpt4 book ai didi

go - 在与 grpc.ClientStreams 交互时是否需要调用 Recv 直到获得 io.EOF?

转载 作者:IT王子 更新时间:2023-10-29 01:15:02 26 4
gpt4 key购买 nike

假设我定义了以下 gRPC 服务:

service Library {
rpc Search(SearchBookRequest) returns (stream SearchBookResponse) {}
}

message SearchBookRequest {
string term = 1;
int32 max_results = 2;
}

message SearchBookResponse {
int32 book_id = 1;
}

它将搜索结果流式传输到指定的最大值。通过 gRPC 的 Go API 与服务交互时,我可以做这样的事情吗?

for i:=0; i<maxResults; i++ {
search_result, err := stream.Recv()
if err == io.EOF {
// Note: If `maxResults` are returned this will never be reached.
break
}
if err != nil {
log.Fatalf("search error: %v", err)
}
fmt.Printf("Book-ID: %d\n", search_result.BookId)
}

或者我是否需要继续调用 Recv 直到获得 io.EOF 以确保 gRPC 正确清理其所有资源?

最佳答案

您的代码是正确的。

您可以在出错时退出。您无需等待 EOF。


编辑:上面的答案不完整。

调用者应该一直接收直到出现错误,否则可能会发生泄漏。还有其他方法可以避免泄漏,例如取消上下文。参见 https://pkg.go.dev/google.golang.org/grpc#ClientConn.NewStream了解详情。

关于go - 在与 grpc.ClientStreams 交互时是否需要调用 Recv 直到获得 io.EOF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com