我已经从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之间进行选择。