栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

protobuf跨语言协议设计

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

protobuf跨语言协议设计

protobuf描述和语法请百度一下。

其他语言(Java,python)不能直接解析c二进制结构体,前端不太好嵌入c代码

方案一

使用一个长度在protobuf序列化后不变的包头,获取固定长度反序列化出包头,解析包头获取包体的类型和长度

 
message MsgHead
{
    
    fixed32     msgType     = 1;

    
    fixed64     msgLength   = 2;

    
    sfixed32    recvSide    = 3;

    
    sfixed64    other       = 4;
}

方案二

开源项目SMSS的设计 地址 https://gitee.com/learnhow/encrypted_stream

解析固定长度的包头长度字节部分,解析获取长度,反序列化包头获取信息

固定长度描述的标志位+固定长度描述的包头长度+变长的序列化后的二进制包头

SMSS项目使用4个字节的AB47为标志

字段设置0和默认值0的区别

在2和3高版本
有 bool has***()函数 判断字段是否设置
也可以添加标志位标识字段是否设置
bool setFlag

protobuf的编码高效和数据更小是对比xml和json格式。体积更小主要体现在int编码和字符串的编码压缩,不适合传输超大数据。跨语言和Java类似,不是真的跨而是官方对每个平台实现了不同的适配。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号