应用层协议设计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数据交换格式,可用于通讯协议,数据存储等领域的语言无关,平台无关,可扩展的序列化结构数据格式;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值