【发布时间】:2015-10-01 02:49:48
【问题描述】:
我最近开始集成 Google 的协议缓冲区,用于在机器人网络中通信更复杂的数据结构(例如矩阵、内部状态数组、设备信息)。
虽然我仍处于原型设计阶段,但我已经开始想知道我应该如何具体地制作用于长期支持的原型消息。我看到了三种可能的方法(非常简单的例子):
1) 中等特异性:使消息特定于每种类型的机器人。例如:
// RobotA.proto
optional int32 commandID
repeated double positionData //ex: this robot has many joints
// RobotB.proto
optional int32 commandID
optional int32 subCommandID //ex: this robot has subcommands
optional double positionData //ex: this robot has only one joint
2) 低特异性:使消息非常笼统。例如:
// GeneralRobotMessage.proto
optional int32 commandID //switch-case which other potential data is needed
optional int32 potentialIntData
repeated double potentialDoubleArray
optional string potentialStringData
optional bool potentialBoolData
3) 高特异性:每种类型的消息都有一个protobuf。例如:
// NAKMessage.proto
// ACKMessage.proto
// RobotAGetPosition.proto
根据过去的经验,我通常采用低特异性方法并使用命令 ID(也称为数据包标头)来指定解析消息的方法。但是对于 protobuf,预先指定的 .proto 的整个概念似乎充当了标头概念。
是否有推荐的消息特异性方法?编码标准?经验法则?
干杯,
【问题讨论】:
标签: python c++ serialization protocol-buffers messaging