当前位置:首页 > IT技术 > 其他 > 正文

应用层协议设计
2022-04-25 22:55:03



应用协议概述

应用层协议设计_redis

  • 在对外提供网络服务时,服务端和客户端需要遵循同一套数据 通讯协议
  • 每个系统不一样,提供的服务也不一样,因此每个系统都要有 自己的应用协议
  • 流式传输解决粘包和半包问题

一个协议设计案例

应用层协议设计_redis_02

具体的代码

应用层协议设计_linux服务器开发_03

应用层协议设计_linux服务器开发_04

应用层协议设计_redis_05

协议设计的种类

二进制协议

比如网络通信运输层中的tcp协议,rtsp,rtmp,rtp。

明文的文本协议

比如应用层的http、redis协议。

混合协议(二进制+明文)

很多企业产品都采用这个。

固定边界协议

能够明确得知一个协议报文的长度,这样的协议易于解析,比如tcp协议。

模糊边界协议

无法明确得知一个协议报文的长度,这样的协议解析较为复杂,通常需要通过某些 特定的字节来界定报文是否结束,比如http协议。

应用层协议设计_后端_06

应用层协议设计_linux服务器开发_07

应用层协议设计_linux服务器开发_08

​https://cloud.tencent.com/developer/article/1038381​

redis协议

https://xargin.com/redis-protocal/

应用层协议设计_linux服务器开发_09

协议设计的注意事项

大小端

应用层协议设计_后端_10

字节对齐

任何变量,不管是堆变量还是栈变量都对应着操作系统中的一块内存,由于内存对齐的要求程序中

的变量并不是紧凑存储的,例如一个c语言的结构体Test在内存中的布局可能如下图所示。

struct Test
{
char a; char b; int32_t c;
};

应用层协议设计_架构师_11

结构体操作的变量便宜

应用层协议设计_架构师_12

协议设计的优劣评判

Netyy中的实现

高效的

快速的打包解包减少对cpu的占用,高数据压缩率降低对网络带宽的占用。

简单的

易于人的理解、程序的解析。

易于扩展的

对可预知的变更,有足够的弹性用于扩展。

容易兼容的

• 向前兼容,对于旧协议发出的报文,能使用新协议进行解析,只是新协议支持的新功能不能使用。

• 向后兼容,对于新协议发出的报文,能使用旧协议进行解析,只是新协议支持的新功能不能使用。

架构师体系

应用层协议设计_后端_13


​​



本文摘自 :https://blog.51cto.com/u

开通会员,享受整站包年服务立即开通 >