文章目录
通信协议设计
基本要素
- 要能完整地识别一帧数据(帧完整性)
- 能够进行序列化和反序列化
- 能够进行协议升级(包括客户端和服务端,需要指明协议版本)
- 协议具备安全性(加解密)
- 能够实现数据压缩,减小传输数据量
消息帧完整性的判断方法
- 1、强制固定每个消息的数据长度,比如规定每个消息都发128字节
这显然是很拙劣的方法。 - 以特定符号来作为分界,如“\r\n”
2、如果传输的消息中也带有这个符号就不可行了。 - 3、固定消息头head+消息体结构body
消息头的长度固定,其中带有指明消息数据长度的字段。先接收头部,解出这个消息完整⻓度,再按此⻓度接收消息体。是⽬前各种⽹络应⽤⽤的最多的⼀种消息格式
- 4、字符流的头部+消息体,如HTTP协议和redis协议
头部中有个字段存储消息总⻓度(content-length),根据特殊字符(⽐如\r\n或者\0)判断头部的完整性。由于不确定头部的长度,显然比第3种方法要麻烦一些。很多时候我们觉得HTTP协议简单只是因为我们对它比较熟悉罢了。
哪些场景适合使用HTTP协议:
- 对公⽹⽤户api,HTTP协议的穿透性最好,所以最适合;
- 效率要求没那么⾼的场景;
- 希望提供更多⼈熟悉的接