接手一项目实时数据传输协议用的jeson,个人觉得jeson协议使用就是方便,然后
jeson数据序列二进制后比较谷歌protobuf要大一半左右。
之前和同事聊天时protobuf 对可变长类型字节压缩
对于 int32 类型的数字,一般需要 4 个字节 来表示;
但采用 Varint 方法,对于很小的 Int32 类型 数字(小于256),则可以用 1个字节 来表示
jeson 数据解析时,每个key 对应值 toString 转换处理 会造成过多垃圾
例如:jd[“type”].ToString()
jeson 格式定好后,客户端要写一个类或结构体 其属性 要和jeson的key一模一样
例如
服务端 jeson 格式 :
{“datas”: {“type”:”1”,”num”:10}}//注意 key 对应的vaule如果没有加双引号jeson解析对象会解释为int
unity 客户端 定义一个结构体
例如 :
public struct TestJeson
{
public string type;
public int num;//对应jeson key num (int类型)
}
客户端拿到数据后需要进行对jeson解析为对象
TestJeson testJeson=JsonMapper.ToObject<TestJeson>(jd["datas"].ToJson());
这里unity 用LitJeson插件。
值得说明的是:
unity在通信大的情况下 对jeson进行解析处理不好会造成mono暴涨,非常可怕,将jeson数据全部用tostring ,而不用转成对象 。
1.tostring 在大量数据解析情况下mono飞快的涨到400+
2.转对象后,mono维持在20左右