自定义协议

应用层

有许多现成的协议(HTTP协议做网站必备),也有许多需要程序员自定义的协议.

1.自定义协议

自定义协议:

1.明确传递的信息是什么

2.约定好信息按照什么样的格式来组织成二进制字符串

举个例子:

当我们点外卖时,打开软件,会显示商家列表,列表中有很多项,每一项都包含了一些信息.商家的名称,图片,好评率......这些信息是通过网络,从服务器获取的.

  • 客户端,需要给服务器发起一个请求,服务器收到请求之后,就给客户端返回一个相应.
  • 外卖软件和服务器之间的沟通,有很多方式,显示商家列表,只是其中一个.因此,在开发设计这个程序的时候,就需要做好良好的规划.
  • 这里的设计是非常灵活的,最主要的是有一个固定的标准...

1.1 示例一 

 实际上,上诉这样的格式约定,可以任意进行约定.只要保证,客户端和服务器遵守同一个约定即可.

1.2 示例二

1.3 示例三

上诉可以看到:

请求和响应,具体的数据组织形式,是非常灵活的,怎么组织都行,只有保证客户端和服务器这边使用的是相同的规则即可.

不同的应用程序,使用的自定义协议是不同的.

2.几个通用的协议格式

2.1 xml

是以成对的标签,来表示"键值对"信息,同时标签支持嵌套,就可以构成一些更复杂的树形结构数据.

优点:xml'非常清晰的把结构化数据表示出来了.

缺点:表示数据需要引入大量的标签,看起来繁琐,同时也会占用不少的网络带宽.

2.2 json

  • 本质上也是键值对.
  • 使用{ }来表示键值对,使用[ ]来表示数组.
  • 数组里的每个元素,可以是数字,字符串,也可以是其它的{ }或[ ].
  • json对于换行并不敏感,如果这些内容全都放在同一行,也是完全合法的.
  • 一般网络传输的时候,会对json进行压缩(去掉不必要的换行和空格),同时把所有的数据都放到一行去,整体占用的带宽就降低了.(影响可读性).

优点:相比于xml,表示的数据简洁很多,可读性非常好,方便程序员观察中间结果,方便调试问题.

缺点: 需要花费一定的带宽来传输key的名字.

2.3 protobuffer

  • 一种二进制的数据序列化方式.
  • 使用二进制的方式,约定某几个字节,表示哪个属性.
  • 最大程度的节省空间(不必传输key,根据位置和长度,区分每个属性).
  • 适用于对于性能要求更高的场景.牺牲了开发效率,换来了运行效率.

优点:节省带宽,最大化效率.

缺点:二进制数据,无法直接肉眼观察,不方便调试.使用起来比较复杂.

问:

对于一个程序来说,是开发效率(写代码快不快)重要,还是运行效率重要(程序跑的快不快)?

答:开发效率更重要!

要想提升运行效率,可以通过升级硬件.

要想提高开发效率,就得招聘更多的程序员.人力成本!!!

相关推荐

  1. 定义Dubbo RPC通信协议

    2024-03-17 06:36:04       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 06:36:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 06:36:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 06:36:04       82 阅读
  4. Python语言-面向对象

    2024-03-17 06:36:04       91 阅读

热门阅读

  1. 微信小程序上传图片c# asp.net mvc端接收案例

    2024-03-17 06:36:04       43 阅读
  2. Spring核心方法:Refresh全解(WebMVC如何装配、关联)

    2024-03-17 06:36:04       38 阅读
  3. 阿里提前批(阿里云)一面30min

    2024-03-17 06:36:04       46 阅读
  4. MATLAB中的矩阵和数组,它们之间有什么区别?

    2024-03-17 06:36:04       41 阅读
  5. C语言每日一题—判断是否为魔方矩阵

    2024-03-17 06:36:04       45 阅读
  6. C++ 基础组件(1)定时器

    2024-03-17 06:36:04       41 阅读
  7. 【C++】每日一题 228 汇总区间

    2024-03-17 06:36:04       36 阅读
  8. Spring之底层架构核心概念解析

    2024-03-17 06:36:04       35 阅读
  9. c# 修改数据集

    2024-03-17 06:36:04       37 阅读
  10. 合作测试开发日志1

    2024-03-17 06:36:04       37 阅读
  11. go的fasthttp学习

    2024-03-17 06:36:04       39 阅读
  12. uniapp 分包

    2024-03-17 06:36:04       41 阅读
  13. 华为交换机端口类型:Access、Trunk、Hybrid

    2024-03-17 06:36:04       42 阅读