Protocol buffers 如何在ProtoBuf(gRPC)-Proto3语法中添加消息类型作为对象?
如何在ProtoBuf-Proto3语法中将消息类型作为对象发送 我想传输对象而不是字符串或数字 例子 在这里,我得到了一个错误Protocol buffers 如何在ProtoBuf(gRPC)-Proto3语法中添加消息类型作为对象?,protocol-buffers,grpc,proto3,protobuf.js,grpc-node,Protocol Buffers,Grpc,Proto3,Protobuf.js,Grpc Node,如何在ProtoBuf-Proto3语法中将消息类型作为对象发送 我想传输对象而不是字符串或数字 例子 在这里,我得到了一个错误 throw Error("no such Type or Enum '" + path + "' in " + this); ^ Error: no such Type or Enum 'object' in Type -- 变通办法 我可以在服务器端将其转换为字符串,然后在客户端将其转换为JSON.parse() 但我想知道,是否有更好的方法。根
throw Error("no such Type or Enum '" + path + "' in " + this);
^
Error: no such Type or Enum 'object' in Type
--
变通办法
我可以在服务器端将其转换为字符串,然后在客户端将其转换为JSON.parse()
但我想知道,是否有更好的方法。根据您要完成的任务,您可能会使用三种类型中的一种
bytes
类型表示任意的字节字符串。您可以选择以您认为合适的方式对类型进行编码李>
any
类型表示任意protobuf消息,允许客户端或服务器对非预定义消息进行编码。这是一个字节字符串,每个消息类型有一个唯一的标识符,语言实现将有方法解包消息oneof
,对于对象类型,您可以使用map
的组合来定义Javascript对象消息李>
如果要发送的所有键和值都具有相同的类型,则可以使用映射类型。您的示例显示了字符串键和字符串值,因此可以使用类型
map
如果要发送与JSON对象结构相似的任意对象数据,可以使用消息类型
不支持对象数据类型
但是,您可以使用协议缓冲区消息类型本身来分层模拟数据
syntax = "proto3";
package db;
service Proxy
{
rpc myFunction(Request) returns (Response);
}
message Request
{
string name = 1;
}
message Response
{
message obj {
string key1 = 1;
string key2 = 2
}
obj keyvalue = 1; // Here you have created your own type obj.
}
在上面的示例中,您可以看到响应消息现在具有类型为obj(您刚刚构建的自定义类型)的“keyvalue”字段
现在,您将在来自服务器的回调中传递对象,而不是原语类型
callback(null, { keyvalue: { key1: "value1", key2: "value2" } });
假设您不知道键,但键/值对数据类型相同且您已知,那么在本例中,您可以使用
map
消息响应
{
map keyvalue=1;
}
回调(null,{keyvalue:{“key1”:“value1”,“key5”:“value2”});
参考资料:-
syntax = "proto3";
package db;
service Proxy
{
rpc myFunction(Request) returns (Response);
}
message Request
{
string name = 1;
}
message Response
{
message obj {
string key1 = 1;
string key2 = 2
}
obj keyvalue = 1; // Here you have created your own type obj.
}
callback(null, { keyvalue: { key1: "value1", key2: "value2" } });
message Response
{
map<string, string> keyvalue = 1;
}
callback(null, { keyvalue: { "key1": "value1", "key5": "value2" } });