深入应用层协议定制:从确定通信内容到选择数据组织方式的完整攻略
引言
在网络通信的架构中,应用层直接对接各类应用程序,是程序员实现网络功能的核心战场。无论是社交软件的消息传递,还是电商平台的订单处理,背后都离不开应用层协议的支撑。而这些协议并非一成不变,很多时候需要程序员根据具体业务需求量身定制。
那么,如何完成应用层协议的定制呢?接下来,我们将以大家熟悉的点外卖场景为例,一步步拆解协议定制的完整过程,从明确信息传递需求到约定数据组织格式,带你深入理解应用层协议定制的精髓。
应用层的协议
应用层直接和应用程序相关,程序员所写的代码只要是和网络通信相关的都可以视为应用层的一部分。
所以应用层中设计到的网络通信协议,很多也都是程序员自己所定制的。
那么我们如何来定制协议呢?
1.根据需求来明确需要传递哪些信息
2.约定好信息组织的格式
定制协议的过程
下面我们以点外卖的场景为例来讲解一下定制协议的过程~~~
1.根据需求来明确需要传递哪些信息
当我们进入点外卖平台的时候会显示一些商家的列表,接下来我们需要明确客户端和服务器之间要传递的信息。
首先客户端会向服务器发出请求,应当包含以下信息:
用户的位置(通常以经纬度的形式表示),用户的id
然后当服务器收到上述信息之后经过一番处理会给出相应的响应,响应应当包含以下信息:
商家的id,商家的位置,商家的图片,评分,配送费,种类
2.约定好信息组织的格式
这里面的格式有很多种,我们一一来讲解:
(1)行文本方式
请求的格式如下:
用户id,用户的位置\n
相应的格式如下:
一个响应应当由多行数据组成,每一行数据中又包含很多列,最终以空行来结尾
当然上述的这种格式只是我个人所定制的,在实际中我们可以根据自己的喜好来进行变换。
比如列与列之间的分隔符不一定用,也可以用;
当然这种方案是较为“原始”的,在20年前还较为常用。
(2)通过xml格式来约定请求和响应的数据
xml的格式和html的格式较为类似,但是xml中的标签我们是可以自己定义的。
我们可以把请求的格式定义如下:
我们可以把响应的格式定义如下:
这种方式的优点是可读性较高,但是缺点也很明显就是冗余信息较多,这样的信息在网络传输会消耗更多的带宽。
(3)json 这是当下最为流行的网络数据格式组织的方案
在这种方式之下,我们可以这样定义请求:
这样的方式的优点就是可读性也较为良好,它所消耗的带宽也比刚刚的xml要少。
但是缺点是还是存在冗余信息。
下面我们就引入protobuf
(4)protobuf
这种方式存储数据是基于二进制的格式,从而可以实现对数据的压缩。
这样的方式就不会包含冗余信息了。
很明显这种方式所消耗的带宽是最少的,但是可读性也变差了。
protobuf会进行约定这一段二进制数据中的哪几个字节表示某个特定的信息。
结语
通过点外卖这一贴近生活的场景,我们清晰地看到了应用层协议定制的全流程:先基于业务需求精准梳理出客户端与服务器间需传递的关键信息,再从行文本、XML、JSON 到 Protobuf 等多种格式中,根据可读性、带宽消耗等需求选择合适的数据组织方式。行文本格式虽 “原始” 却简单直接,曾在早期网络通信中广泛应用;XML 格式可读性强但冗余信息多,带宽成本较高;JSON 格式兼顾可读性与轻量化,成为当下主流选择;而 Protobuf 以二进制存储实现极致压缩,最大程度降低带宽消耗,却失去了部分可读性。