【发布时间】:2016-04-22 09:38:25
【问题描述】:
使用protogen工具后,我有一个用于发送消息的消息类型:
type File struct {
Info string `protobuf:"bytes,1,opt,name=info,json=info" json:"info,omitempty"`
BytesValues []byte `protobuf:"bytes,2,opt,name=bytes_values,json=bytesValues,proto3" json:"bytes_values,omitempty"`
}
我正在尝试使用BytesValues 字段发送一些二进制数据,如下所示:
filePath := filepath.Join("test", "myfile.bin")
f, _ := ioutil.ReadFile(filePath) // error return value ignored for brevity
msg := File{BytesValues: f}
body, _ := proto.Marshal(msg) // encode
服务器似乎在解码我发送给它的消息时出现问题。这是使用带有协议缓冲区的[]byte 字段发送二进制数据的正确方法吗?
【问题讨论】:
-
不使用protobuf发送大量数据会破坏使用protobuf的实际目的吗?如何在 protobuf 中编码 RPC 套接字信息,并让服务使用它来传输文件?
-
服务器的响应是什么?
-
@eduncan911我的双手被束缚在这个服务器上,因为我尝试与之通信的服务器是 Avatica(Apache Calcite 的一部分),它被 Apache Phoenix 查询服务器使用。
-
@Sean Server 响应成功,但二进制数据未插入表中。除非我向消息中添加数据的方式有问题,否则我认为这可能是 Avatica 的问题。我已经联系了开发人员,他们正在调查。
-
您确定要将 Info 的 protobuf 类型设为
bytes吗?只看类型对应,我就预料到string。
标签: go protocol-buffers