protobuf定义低带宽的移动消息
2017-08-23 11:47
225 查看
protobuf定义低带宽的移动消息
(金庆的专栏 2017.8)
用protobuf定义协议时,可利用protobuf的编码将移动消息压缩到尽量小。
service Battle {
// 移动变化量。将广播给其他玩家,包括自己。
// 移动受步长限制。自动转向移动方向。
rpc Move(Movement) returns (rpc.EmptyMsg);
// 转向最终面向。将广播给其他玩家,包括自己。
rpc TurnTo(Rotation) returns (rpc.EmptyMsg);
}
// 位置,移动和角度都用整数向量表示,单位为分米.
// 使用整数占用的带宽比浮点数少。
// U3d使用以米为单位的浮点数,需要转化。
message Position {
optional sint32 x = 1;
optional sint32 y = 2;
}
// 移动时发送移动量。不是发送绝对位置,使用更小的数字,占用更少带宽。
message Movement {
optional sint32 x = 1;
optional sint32 y = 2;
}
// 角度向量在满足精度的前提下,应该尽量使用绝对值小的数据表示,占用更少带宽.
message Rotation {
optional sint32 x = 1;
optional sint32 y = 2;
}
// 位置和面向。用于初始化对象。
message PosAndRot {
optional Position position = 1;
optional Rotation rotation = 2;
}
说明
* 名字短点。因为RPC消息中需带服务全名和方法名,所以package, service, method名字要短点
* 坐标用整数表示。浮点数会固定占用4个字节,而接近0值的整数值只占用不到一个字节。
* 使用移动变化量。地图可能很大,绝对坐标值较大会占用变多字节,而移动量总是接近0
* 角度使用向量更容易处理。也可使用整数的角度值(0-360)表示,但处理麻烦。
* 移动隐含了转向。所以转向消息不多,不必太在意大小。
* sint编码压缩最大。要求地图坐标应该都在0附近,正负各半。
* 单位选择不要太细,分米到厘米都可以。
(金庆的专栏 2017.8)
用protobuf定义协议时,可利用protobuf的编码将移动消息压缩到尽量小。
service Battle {
// 移动变化量。将广播给其他玩家,包括自己。
// 移动受步长限制。自动转向移动方向。
rpc Move(Movement) returns (rpc.EmptyMsg);
// 转向最终面向。将广播给其他玩家,包括自己。
rpc TurnTo(Rotation) returns (rpc.EmptyMsg);
}
// 位置,移动和角度都用整数向量表示,单位为分米.
// 使用整数占用的带宽比浮点数少。
// U3d使用以米为单位的浮点数,需要转化。
message Position {
optional sint32 x = 1;
optional sint32 y = 2;
}
// 移动时发送移动量。不是发送绝对位置,使用更小的数字,占用更少带宽。
message Movement {
optional sint32 x = 1;
optional sint32 y = 2;
}
// 角度向量在满足精度的前提下,应该尽量使用绝对值小的数据表示,占用更少带宽.
message Rotation {
optional sint32 x = 1;
optional sint32 y = 2;
}
// 位置和面向。用于初始化对象。
message PosAndRot {
optional Position position = 1;
optional Rotation rotation = 2;
}
说明
* 名字短点。因为RPC消息中需带服务全名和方法名,所以package, service, method名字要短点
* 坐标用整数表示。浮点数会固定占用4个字节,而接近0值的整数值只占用不到一个字节。
* 使用移动变化量。地图可能很大,绝对坐标值较大会占用变多字节,而移动量总是接近0
* 角度使用向量更容易处理。也可使用整数的角度值(0-360)表示,但处理麻烦。
* 移动隐含了转向。所以转向消息不多,不必太在意大小。
* sint编码压缩最大。要求地图坐标应该都在0附近,正负各半。
* 单位选择不要太细,分米到厘米都可以。
相关文章推荐
- [ProtoBuf]定义ProtocolBuffer消息
- 使用protobuf定义消息
- 用protobuf定义消息及处理
- 使用protobuf定义消息
- 用protobuf定义消息及处理
- protobuf extensions(extend)的消息定义及Java使用方法
- 基于netty的项目中使用protobuf,巧妙定义proto完成不同消息的编码和解码处理 .
- 用protobuf定义消息及处理
- 基于netty的项目中使用protobuf,巧妙定义proto完成不同消息的编码和解码处理
- 一种自动反射消息类型的 Google Protobuf 网络传输方案
- RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)
- 运用google-protobuf的IM消息应用开发(前端篇)
- [netty]-消息编解码之google的Protobuf编解码
- Protobuf消息设计原则(值得借鉴)
- 我的Protobuf消息设计原则
- RabbitMQ消息队列的小伙伴(八): ProtoBuf(Google Protocol Buffer)
- protobuf 中的嵌套消息的使用 主要对set_allocated_和mutable_的使用
- Protobuf3 系列二 定义复杂的proto文件
- 我的Protobuf消息设计原则(续)--实践
- protobuf 自定义描述消息的实现