нарушение протокола потоковой передачи клиента при создании конечной точки потока grpc-сервера в go

#go #stream #grpc #grpc-go

#Вперед #поток #grpc #grpc-go

Вопрос:

Я пытаюсь создать конечную точку потоковой передачи сервера grpc.

Вот мой файл protobuf

 syntax = "proto3";

option go_package = "mirror_streampb";
option java_package = "com.mirror_stream";
option java_outer_classname = "StreamIdsProto";
option java_multiple_files = true;

package mirror_stream;

service StreamIDs {

    rpc ListIDs(ListIDsRequest) returns (stream ListIDsResponse) {}

}

message ListIDsRequest {
    int32 num = 1;
}

message ListIDsResponse {
    int32 num = 1;
    int32 id = 2;
}

  

И вот моя реализация golang для этого метода. Который возвращает только некоторые случайные числа.

 func (s *Server) ListIDs(req *streampb.ListIDsRequest, stream streampb.StreamIDs_ListIDsServer) error {

    for i := int32(0); i < req.Num; i   {
        resp := amp;streampb.ListIDsResponse{
            Num: i,
            Id:  int32(rand.Intn(10000000)),
        }
        if err := stream.Send(resp); err != nil {
            return err
        }
    }
    return nil
}
  

Поэтому, когда я пытаюсь вызвать этот метод, я получаю эту ошибку Failed while making call: code:unknown message:grpc: client streaming protocol violation: get <nil>, want <EOF>

Я не уверен, почему это происходит и откуда оно исходит.

Кто-нибудь может помочь мне разобраться в этом?

Комментарии:

1. Сервер выглядит нормально. Что на стороне клиента?

2. @BurakSerdar Клиента нет, я пытаюсь вызвать его с помощью yab. Что-то вроде этого yab myService mirror_stream.StreamIDs/ListIDs -r '{"num":10}' -p localhost:50051