我正在使用protobuf-net消息从c#中的客户端向c ++中的服务器发送位置/旋转数据(vector3,四元数)。
一开始,我尝试了
形式的分层方法Message Vector3
{
int32 x = 1;
int32 y = 2;
int32 z = 3;
}
Message Transform
{
Vector3 trackedPos1 = 1;
Vector3 trackedPos2 = 2;
Vector3 trackedPos3 = 3;
}
,层次结构变得越来越大,随之而来的是probbuff消息的开销。我可以将消息拼合为一条消息,但不确定消息将变得易于管理。
所以有人知道如何以低开销解决此问题吗?
答案 0 :(得分:1)
您是否可以重新构造树以利用“打包数组”可能值得思考-例如,如果您要发送200 Transform
(因此:600 Vector3
和1800 { {1}}),通过
int32
您只需发送一个即可简化很多:
repeated Transform data = 1;
长度为1800的。用protobuf-net术语可以这样处理:
repeated int32 data = 1 [packed = true];
这可以避免:
[ProtoMember(1, IsPacked = true)]
public int[] Data {get;set;}
实例的200个字段标题Transform
个实例的200个长度前缀Transform
实例的600个字段标题Vector3
个实例的600个前缀而不是仅使用单个字段标题和单个长度前缀
但是,将需要不同的处理。您必须手动将9个连续值的每个块都视为Transform。