Вам необходимо вызывать Recv, пока вы не получите io.EOF при взаимодействии с grpc.ClientStreams?

Предположим, я определил следующую службу gRPC:

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

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

message SearchBookResponse {
  int32 book_id = 1;
}

Он возвращает результаты поиска обратно до указанного максимума. Могу ли я делать что-то подобное при взаимодействии со службой через Go API gRPC?

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 правильно очищает все свои ресурсы?

1 ответ

Решение

Ваш код правильный.

Вы можете выйти на ошибки. Вам не нужно ждать EOF.

Другие вопросы по тегам