[C/C++后端开发学习]22 协议设计与Protobuf

本文介绍了通信协议设计的基本要素,强调了消息帧完整性的判断方法,并详细探讨了Protobuf协议,包括IDL语法、在C++中的使用、编码等方面,揭示了其在序列化和反序列化中的高效性能。
摘要由CSDN通过智能技术生成

通信协议设计

基本要素

  • 要能完整地识别一帧数据(帧完整性)
  • 能够进行序列化和反序列化
  • 能够进行协议升级(包括客户端和服务端,需要指明协议版本)
  • 协议具备安全性(加解密)
  • 能够实现数据压缩,减小传输数据量

消息帧完整性的判断方法

  • 1、强制固定每个消息的数据长度,比如规定每个消息都发128字节
    这显然是很拙劣的方法。
  • 以特定符号来作为分界,如“\r\n”
    2、如果传输的消息中也带有这个符号就不可行了。
  • 3、固定消息头head+消息体结构body
    消息头的长度固定,其中带有指明消息数据长度的字段。先接收头部,解出这个消息完整⻓度,再按此⻓度接收消息体。

    是⽬前各种⽹络应⽤⽤的最多的⼀种消息格式

  • 4、字符流的头部+消息体,如HTTP协议和redis协议
    头部中有个字段存储消息总⻓度(content-length),根据特殊字符(⽐如\r\n或者\0)判断头部的完整性。由于不确定头部的长度,显然比第3种方法要麻烦一些。很多时候我们觉得HTTP协议简单只是因为我们对它比较熟悉罢了。

哪些场景适合使用HTTP协议:

  1. 对公⽹⽤户api,HTTP协议的穿透性最好,所以最适合;
  2. 效率要求没那么⾼的场景;
  3. 希望提供更多⼈熟悉的接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值