gRPC Несколько типов сообщений на двунаправленном канале - PullRequest
0 голосов
/ 13 апреля 2019

Я установил пример кода из примера gRPC route_guide https://github.com/grpc/grpc/tree/v1.19.0/examples/node/dynamic_codegen/route_guide, который использует этот протокол https://github.com/grpc/grpc/blob/v1.19.0/examples/protos/route_guide.proto, который реализует двунаправленную потоковую передачу сообщений следующим образом:

rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}

где RouteNote это тип сообщения:

message RouteNote {
  // The location from which the message is sent.
  Point location = 1;

  // The message to be sent.
  string message = 2;
}

Насколько я понимаю, можно объявить только один тип сообщения для каждого двунаправленного потока, и использование oneof означает, что в этом примере я задаю только местоположение или сообщение. Но я хочу иметь возможность отправлять сообщения нескольких типов по двунаправленному каналу сообщений. Поэтому моя идея состоит в том, чтобы объявить только тип int32 для типа сообщения, а затем строку для хранения строкового объекта JSON. Примерно так:

message RouteNote {
int32 msgType = 1;    
string jsonMsg = 2;
}

Затем на клиенте и на сервере я могу определить тип сообщения и кодировать / декодировать JSON в известный формат, который я разделяю между двумя сторонами.

Я не сомневаюсь, что это сработает, но мои вопросы 1) Есть ли у этого недостаток? 2) Есть ли лучший способ сделать это в gRPC?

Примечание: я использую nodejs в этом вопросе, но я считаю, что это не зависит от языка для gRPC, и для реализации, над которой я работаю, я могу выбирать между nodejs, C ++ или python.

...