【发布时间】:2019-03-13 04:25:41
【问题描述】:
我在我的一个应用程序(语音识别)中使用 gRPC 客户端服务器框架。我想通过我的观察来澄清一些重要的事情。
1.可选数据字段在客户端未填充时如何发送?
让我们看看下面的例子:(假设使用了 proto3,所以默认情况下所有字段都是可选的)
service NameStudent {
rpc GetRoll(Student) returns (Details) {}
}
#Student'd details
message Student{
int32 roll = 1;
string name = 2;
string gender = 4;
int32 age = 3;
DOB dateofbirth = 5;
}
#Students Date of Birth
message DOB {
int32 dd = 1;
int32 mm = 2;
int32 yy = 3;
}
#Parent's details
message Parent{
string parent =1;
}
#Students all details (includes student + parent)
message Details {
Student student = 1;
Parent parent = 4;
}
假设服务获取(来自客户端的输入)一些学生详细信息,例如姓名、姓名和年龄,并返回该学生的(所有) 详细信息
所以现在如果不是发送所有 3 个详细信息(即滚动、姓名和年龄),甚至可以发送任何一两个详细信息,并且(从逻辑上假设)服务有效。
在这种情况下,服务器会接收所有字段(省略字段为空白/NULL)还是客户端根本不发送那些省略的信息? (见下文二进制数据的表示从客户端发送)
// roll and name filled
// age is left blank
// gender and DOB are always sent blank from client
{
roll: 170012,
name: "John Doe",
age: ,
gender: "",
dateofbirth: {
dd: ,
mm: ,
yy:
}
}
或
//only roll and name is sent and rest is just not sent
{
roll: 170012,
name: "John Doe"
}
2。可以为两个服务连接单个存根吗?
如果服务器提供 2 项服务并且我正在制作客户端存根,我能否将来自同一个存根的 2 个通道连接到访问它的 2 个不同服务的同一台服务器?
【问题讨论】:
标签: web-services protocol-buffers grpc protobuf-c