#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