dongxkbjiaofea1163
2017-03-20 22:45
浏览 147
已采纳

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

Suppose I define the following gRPC service:

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

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

message SearchBookResponse {
  int32 book_id = 1;
}

It streams search results back up to a specified maximum. When interacting with the service via gRPC's Go API, am I allowed to do something like this?

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
", search_result.BookId)
}

Or am I required to keep calling Recv until I get io.EOF to ensure that gRPC properly cleans up all its resources?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dq_1984 2017-03-21 23:10
    已采纳

    Your code is correct.

    You can exit on errors. You don't need to wait for an EOF.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题