Web services gRPC中如何将数据从客户端发送到(多服务)服务器
我正在我的一个应用程序(语音识别)中使用gRPC客户机-服务器框架。有几件重要的事情我想用我的观察来澄清 1。当客户端未填充可选数据字段时,如何发送该字段? 让我们看看下面的示例:(假设使用proto3,因此默认情况下所有字段都是可选的) 假设服务接受(来自客户端的输入)一些学生的详细信息,比如名单、姓名和年龄,然后返回该学生的(全部)详细信息 因此,现在,如果不发送所有3个详细信息(即卷名、姓名和年龄),甚至可以发送任何一个或两个详细信息,并且(逻辑上假设)服务可以工作 在这种情况下,服务器会接收所有字段(省略的字段为空白/空),还是客户端根本不发送该省略的信息?(请参见下面从客户端发送的二进制数据的表示) 或Web services gRPC中如何将数据从客户端发送到(多服务)服务器,web-services,protocol-buffers,grpc,protobuf-c,Web Services,Protocol Buffers,Grpc,Protobuf C,我正在我的一个应用程序(语音识别)中使用gRPC客户机-服务器框架。有几件重要的事情我想用我的观察来澄清 1。当客户端未填充可选数据字段时,如何发送该字段? 让我们看看下面的示例:(假设使用proto3,因此默认情况下所有字段都是可选的) 假设服务接受(来自客户端的输入)一些学生的详细信息,比如名单、姓名和年龄,然后返回该学生的(全部)详细信息 因此,现在,如果不发送所有3个详细信息(即卷名、姓名和年龄),甚至可以发送任何一个或两个详细信息,并且(逻辑上假设)服务可以工作 在这种情况下,服务器会
//only roll and name is sent and rest is just not sent
{
roll: 170012,
name: "John Doe"
}
2。可以为两个服务连接单个存根吗?
如果服务器提供2项服务,而我正在制作一个客户端存根,我是否能够将来自同一存根的2个通道连接到同一台服务器,以访问它的2项不同服务?问题1 看一看。特别是: 对于proto3中的任何非重复字段,或proto2中的可选字段, 编码的消息可能有,也可能没有与之对应的键值对 字段号 但在实践中,我注意到在序列化中省略了带有默认值的可选字段。当protobuf被反序列化时,解析器将把缺少的字段解释为默认值。您可以在Python protobuf对象上使用
SerializeToString()
方法来观察这种行为
问题2
完全可以将多个gRPC服务连接到同一台服务器,并从同一客户端通道与多个服务交互。gRPC用于区分连接到同一服务器的多个服务。请看一个例子
add_GreeterServicer\u to_server
将用户定义的处理程序与路径/helloworld.Greeter/SayHello
关联,然后存根使用该路径识别服务器上的服务。问题1
看一看。特别是:
对于proto3中的任何非重复字段,或proto2中的可选字段,
编码的消息可能有,也可能没有与之对应的键值对
字段号
但在实践中,我注意到在序列化中省略了带有默认值的可选字段。当protobuf被反序列化时,解析器将把缺少的字段解释为默认值。您可以在Python protobuf对象上使用SerializeToString()
方法来观察这种行为
问题2
完全可以将多个gRPC服务连接到同一台服务器,并从同一客户端通道与多个服务交互。gRPC用于区分连接到同一服务器的多个服务。请看一个例子
add_GreeterServicer\u to_server
将用户定义的处理程序与路径/helloworld.Greeter/SayHello
相关联,然后存根使用该路径来标识服务器上的服务。Hey@Richard很好地起草了答案(向上投票)。我已经得到了问题的答案,但是理解你在回答2中分享的例子会有帮助。我不是python爱好者,所以我会尽我最大的努力一步一步地学习这个例子。同时,如果你能/想补充更多的解释,请这样做。。。再次感谢@Richard很好地起草了答案(请投赞成票)。我已经得到了问题的答案,但是理解你在回答2中分享的例子会有帮助。我不是python爱好者,所以我会尽我最大的努力一步一步地学习这个例子。同时,如果你能/想补充更多的解释,请这样做。。。再次感谢
// 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"
}