应用层协议设计ProtoBuf/Thrift

简介: 应用层协议设计ProtoBuf/Thrift

json序列化和反序列化

       将xml,json文本反序列化为类对象或结构体对象;xml本地用得比较多,json比较通用;通用json库如cjson,rapidjson,jsoncpp;

判断消息的完整性,区分消息的边界

       1、以固定大小字节数目来分界,如每个消息100字节,对端收起100字节,就当成一个消息来解析;

       2、以特定符号来分界,如每个消息都以特定的字符如\r\n来结尾,当在字节流中读取到该字符时,则表明上一消息到此为止;

       3、固定消息头+消息体结构,这种结构中一般消息头部分是一个固定字节长度的结构,并且消息头中会有一个特定的字段指定消息体的大小,收到消息时,先接收固定字节数的头部,解析这个消息的完整长度,按此长度接收消息体。这是目前各种网络应用用的最多的消息格式;header+body

       4、在序列化后的buffer前面增加一个字符流的头部,其中有个字段存储消息总长度,根据特殊字符如\n或\0判断头部的完整性,http和redis采用的时这种方式,收到消息的时候,先判断已收到数据中是否包含结束符,收到结束符后解析消息头,解出这个消息完整长度,按此长度接收消息体;

协议安全

       1、xxtea固定key

       2、aes固定key

       3、openssl

数据压缩

       1、deflate  nginx

       2、gzip

       3、lzw

       文本可以考虑做压缩,带宽成问题的时候再去考虑;

protobuff

       protocol buffers是一种语言中立,与平台无关,可扩展的序列化数据格式,可用于通讯协议,数据存储等;

       protocol buffers在序列化数据方面,它是灵活的,高效的。相比xml, protocol buffers更加小巧,更加快速。一旦定义了要处理的数据的数据结构之后,就可以利用 protocol buffers的代码生成工具生成相关的代码。甚至可以在无需重新部署程序的情况下更新数据结构。只需使用protocol对数据结构进行一次描述,即可利用各种不同语言或从各种不同数据流中对你的结构化数据轻松读写;

       protocol buffers很适合做数据存储或rpc数据交换格式,可用于通讯协议,数据存储等领域的语言无关,平台无关,可扩展的序列化结构数据格式;

目录
相关文章
|
2月前
|
存储 负载均衡 API
跨语言的GRPC协议
【2月更文挑战第11天】
|
4月前
|
存储 XML 移动开发
应用层协议设计 ProtoBuf
应用层协议设计 ProtoBuf
|
4月前
|
存储 XML JSON
Protobuf应用层协议设计
Protobuf应用层协议设计
46 0
|
5月前
|
存储 JSON 编解码
IM通讯协议专题学习(十):初识 Thrift 序列化协议
本文将带你一起初步认识Thrift的序列化协议,包括Binary协议、Compact协议(类似于Protobuf)、JSON协议,希望能为你的通信协议格式选型带来参考。
65 1
|
6月前
|
存储 XML JSON
应用层协议设计及ProtoBuf
应用层协议设计及ProtoBuf
52 0
|
6月前
|
存储 XML JSON
高效的网络传输协议设计protobuf
高效的网络传输协议设计protobuf
73 1
|
12月前
|
存储 网络协议 Dubbo
如何设计可向后兼容的RPC协议
HTTP协议(本文HTTP默认1.X)跟RPC协议又有什么关系呢?都属于应用层协议。
103 0
|
JSON Java 编译器
Thrift的日常—协议
Thrift的日常—协议
Thrift的日常—协议
|
消息中间件 网络协议 Java
Thrift的日常—传输层
Thrift的日常—传输层
Thrift的日常—传输层
|
Web App开发 存储 编解码
【WebRTC原理探索】更进一步,核心组件RTP/RTCP数据传输协议
【WebRTC原理探索】更进一步,核心组件RTP/RTCP数据传输协议
276 0