前言:
对于OIS七层协议模型来说,每一层都有特定的一些协议来规定网络中的传输规则,可是这些协议已经满足不了新时代的广大需求,我们需要通过自定义协议的方式来针对特定需求或应用场景而设置网络通信协议。
对于应用层,是和程序员打交道最多的一个区域,应用层的很多协议都是程序员自制的,因为要迎合市场需求和客户需求,以及其他特殊的应用场景,基于其他协议,针对性的自定义一个网络通信协议出来。如何实现自定义协议呢?以下就会分析一下自定义协议需要完成哪些工作。
自定义协议
1.根据需求,确定传输信息
客户端--服务器之间要确定好传输的各种信息,假如我们在点外卖的时候,在搜索框输入“黄焖鸡米饭”,就会出现一系列的各种商家和店铺,标好价格,供客户挑选,此时对于客户端来说输入的请求和服务端返回的响应如下图:
2.约定信息组织格式
信息的组织方式有很多种,有用文本的,还有json形式的,xml形式的等等,以下介绍几个常见的信息组织格式:
(1)行文本格式
请求格式:
响应格式:
特点:很原始的一种定义方式。
(2)xml格式
和html一样,是使用标签形式的键值对来定义内容的,html大多数标签内容都是写好的,固定的,xml的标签内容则允许自定义。
请求格式:
<request>
<IP>133.4.5</IP>
<port>3030</port>
<number>141xxxxxxxx</number>
<text>"黄焖鸡米饭"</text>
</request>
响应格式:
<response>
<shop>
<id>001</id>
<pic>黄焖鸡.jpg</pic>
<name>超好吃黄焖鸡</name>
<price>16.80</price>
<score>4.80</score>
</shop>
。。。。。。
</response>
特点:代码可读性高,但是冗余信息太多(如多个标签),很消耗网络带宽
(3)json格式
对于json格式来说,基本定义数据的格式是大括号内部包含键值对的形式。键和值之间使用冒号分隔开。
如下:
{
"id" : 001,
"pic" : "黄焖鸡.jpg",
"name" : "超好吃黄焖鸡",
"price" : 16.80
}
特点:可读性也很高,虽然也有冗余,但是比xml格式消耗的带宽少
(4)protobuf格式
使用压缩为二进制的形式来定义格式,用开发效率换执行效率。
特点:可读性低,性能高。
3.总结
数据组织格式:
行文本:原始定义方式
xml:可读性高,冗余量高
json:可读性高,冗余量一般,目前主流方式
protobuf:可读性低,运行效率高,冗余最小,高性能情况下使用