应用层自定义协议

文章目录

    • 一、前言
    • 二、应用层自定义协议
    • 三、通用协议格式
      • 3.1 xml
      • 3.2 josn
      • 3.3 protobuffer

后端开发必须掌握的知识点!

一、前言

应用层主要是干嘛的呢??

应用层协议定义了应用程序之间通信的规则和标准。定义了数据的格式数据交换的标准和接口规范

应用层协议包括:HTTP/HTTPS、FTP、SMTP 等。本篇暂时不介绍这些应用层协议。


二、应用层自定义协议

应用层自带的协议有很多,但也有很多时候,是需要程序员自己定义协议。

假如,外卖现在打开某个外卖软件,显示的是商家列表,每一个商家都包含了很多信息,包括:商家的名称、商家图片、好评率、距离你的位置、评分等…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些信息都是通过网络,从服务器获取的。客户端,需要给服务器发起一个请求,服务器收到请求之后,就给客户端返回一个响应。

外卖软件和服务器之间的沟通,有很多种方式。展示商家列表,只是其中一个。因此,在开发设计这个程序的时候,就需要提前做好规划。(这里的设计是非常灵活的,最主要的是要有一个固定的标准

现做出如下设计:

  1. 先明确当前请求和响应中包含那些信息(根据需求来)

    请求:用户身份、用户当前位置

    响应:商家名称、商家图片、月售、距离你的位置、评分……

  2. 明确具体的请求和响应的格式

    所谓的“明确格式"就是看你按照啥样的方式,构造出一个字符串后续这个字符串就可以作为tcp 或者udp 的 payload进行传输,具体例子如下:

    • 示例一:

      请求:1234,80 100 //1234为用户身份,80 100为用户当前位置

      响应:韩国炸鸡,1.jpg,2000,2.7km,4.8 \n

      ​ 米村拌饭,2.jpg,5000,2.6km,4.9 \n

      ​ 唐四角手工烘焙,3.jpg,200,2.2km,4.9 \n

    • 示例二:

      请求:80,100;1234

      响应:韩国炸鸡;1.jpg;2000;2.7km;4.8 !米村拌饭;2.jpg;5000;2.6km;4.9 !唐四角手工烘焙;3.jpg;200,2.2km;4.9! //使用!分割每个商家。商家的每个信息使用;来分割

    • 示例三:

      请求:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      响应:

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    上述方式,就可以看到,请求和响应,具体的数据组织形式,是非常灵活的。程序猿想怎么组织都行!!只需要保证客户端和服务器这边使用的是相同的规则即可!!

三、通用协议格式

虽然我们说,自定义的协议格式,是可以任意的。但是为了避免出现过于天马行空的设计。有些大佬就搞出了一些"通用的协议格式",参考这些格式,就可以对咱们的协议设计产生重要的指导作用。

3.1 xml

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

对象,本质上也是键值对。属性的名字就是键,属性的值就是值。

请求:

<requset><userId> 1234 </userId><position> 100 80 </position>
</requset>

响应:

<response><shops><shop><name> 韩国炸鸡 </name><image> 1.jpg </image><distance> 2.7km </distance><sale> 5000 </sale><star> 4.8 </star></shop><shop><name> 米村拌饭 </name><image> 2.jpg </image><distance> 2.6km </distance><sale> 2000 </sale><star> 4.9 </star></shop></shops>
</response>

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

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

国内,最贵的硬件资源,就是网络带宽。

3.2 josn

最流行的一种数据组织格式,本质上也是键值对,看起来,比 xml 要干净不少。

json 对于换行并不敏感,如果这些内容全都放在同一行,也是完全合法的。

一般网络传输的时候,会对json进行压缩(去掉不必要的换行和空格),同时把所有数据都放到一行去。整体占用的带宽就更降低了。(影响到可读性)

请求:

{userId: 1234position:"100 80"
}

响应:

[{name:'韩国炸鸡'iamge:'1.jpg'distance:'2.7km'sale:5000star:4.8},{name:'米村拌饭'image:'2.jpg'distance:'2.6km'sale:2000star:4.9}
]

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

劣势: 终究是需要花费一定的带宽来传输 key 的名字的。

3.3 protobuffer

谷歌提出的一套,二进制的数据序列化方式。

使用二进制的方式,约定某几个字节,表示哪个属性…最大程度的节省空间(不必传输key,根据位置和长度,区分每个属性)

这个主要用于,对于性能要求更高的场景。牺牲了开发效率,换来运行效率。(对于一个程序来说开发效率更重要一点)

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

缺点: 二进制数据,无法肉眼直接观察,不方便调试。使用起来比较复杂。需要专门编写一个 proto 文件,描述数据的格式是咋样的。开发效率低。


除了上述的这三种之外,还存在很多其他的序列化方式(数据组织格式) ,Java标准库就提供了方式。其他的第三方库,提供的方式更丰富了。

像 HTTP 这样的协议,后面会出一篇博客来专门讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第74讲:MySQL数据库InnoDB存储引擎事务:Redo Log与Undo Logo的核心概念

文章目录 1.InnoDB引擎中的逻辑存储结构2.事务的基本概念3.Redo log的核心概念3.1.什么是Redo log3.2.如果没有redo log面临的问题3.3.使用redo log之后是怎样的流程 4.Undo log的核心概念 1.InnoDB引擎中的逻辑存储结构 InnoDB存储引擎的逻辑结构分为以下几层&#xff1a; Ta…

【链表Linked List】力扣-83 删除排序链表中的重复元素

目录 题目描述 解题过程 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff1…

Python源码17:使用海龟画图turtle画五星红旗

turtle模块是一个Python的标准库之一&#xff0c;它提供了一个基于Turtle graphics的绘图库。Turtle graphics是一种流行的绘图方式&#xff0c;它通过控制一个小海龟在屏幕上移动来绘制图形。 turtle模块可以让您轻松地创建和控制海龟图形&#xff0c;从而帮助您学习Python编…

python基于轻量级卷积神经网络模型ShuffleNetv2开发构建辣椒病虫害图像识别系统

轻量级识别模型在我们前面的博文中已经有过很多实践了&#xff0c;感兴趣的话可以自行移步阅读&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》 《基…

你的手机注册了多少互联网账号?赶快通过这个功能查询一下吧!

一键查询手机号绑定&#xff01;你的手机注册了多少互联网账号&#xff1f;赶快查询一下吧&#xff01; 你知道你名下的手机号绑定了多少互联网账号吗&#xff1f; 怎么查询手机号绑定了什么账号呢&#xff1f; ...... 不用担心 一键查询手机号绑定的帐号功能来了&#xff01; …

制造业企业如何建立智能工厂

今天就聊聊企业智能工厂的打造&#xff0c;企业想实现数字化转型建立智能工厂&#xff0c;就需要先建设数字化车间&#xff0c;可以说数字化车间是建设智能工厂的重要一环&#xff0c;智能工厂的基础是数字化车间。数字化车间可以实现企业生产过程中车间计划调度、工艺执行管理…

食品厂ERP有哪几种?食品厂ERP软件哪个操作简单

食品安全问题是近些年备受消费者和企业关注的行业&#xff0c;而食品安全管理涉及原材料、配方、车间、工艺、设备、包装、仓储、保质期等多个方面&#xff0c;因而各个业务部门之间的协同问题就显得颇为重要。 想要提升采购、保质期、库龄分析、财务、订单、原材料、仓储等各…

Pycharm修改文件默认打开方式 + CSV Editor插件使用

1、File —> Settings —> Editor —> File Types 然后将*csv添加到最上面 在plugins中下载插件&#xff0c;CSV Editor 备注&#xff1a;不在上一步的“File Types”中将*.csv设置为CSV格式&#xff0c;插件是不起作用的 就可以使用了

十二、FreeRTOS之FreeRTOS任务相关API函数

本节需要掌握以下内容&#xff1a; 1&#xff0c;FreeRTOS任务相关API函数介绍&#xff08;熟悉&#xff09; 2&#xff0c;任务状态查询API函数实验&#xff08;掌握&#xff09; 3&#xff0c;任务时间统计API函数实验&#xff08;掌握&#xff09; 4&#xff0c;总结 一…

【Docker】从零开始:15.搭建亿级数据Redis集群之哈希算法概念

【Docker】从零开始&#xff1a;15.搭建亿级数据Redis集群之哈希算法概念篇 概述一般业界的3种解决方案1.哈希取余分区优点&#xff1a;缺点&#xff1a; 2.一致性哈希算法分区背景目的原理一致性哈希环节点映射key落到服务器的落键规则 优点容错性扩展性 缺点 3.哈希槽分区背景…

家用超声波清洗机哪个牌子好?一起来看、值得推荐超声波清洗机

家用超声波清洗机可以干嘛呢&#xff1f;最常见的就是来清洗眼镜。眼镜党朋友应该经常接触超声波清洗机&#xff0c;它常出现在眼镜店中&#xff0c;眼镜店老板帮顾客清洗眼镜&#xff1b;也会出现在工业领域、医疗领域等&#xff0c;超声波清洗机使用范围还是挺广的&#xff0…

微信小程序 分享的两种方式:菜单级和按钮级

按钮级 在使用微信小程序的时候&#xff0c;我们可能会设计到一些视频的一些分享等&#xff0c;那么视频分享也分为两种方式,例如下图&#xff0c;当我们点击的时候&#xff0c;进行一个转发分享的一个操作 那么在原先代码的基础上&#xff0c;我们需要在原先代码的基础上butt…

Unity中动态合批

文章目录 前言一、动态合批的规则1、材质相同是合批的前提&#xff0c;但是如果是材质实例的话&#xff0c;则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader&#xff0c;来测试动态合批1、我们选择模型的 Mesh…

电商API接口开发和接入说明{包含淘宝/京东/拼多多/抖音}

“为什么改了这个没告诉我” “实际功能和文档上说的不一样啊”。 这些话大家在进行电商API接口开发时&#xff0c;想必耳朵都听出老茧了。 真不是故意的&#xff0c;有时候任务比较急&#xff0c;就先改了代码&#xff0c;想着以后再同步文档&#xff0c;然后就给忘了。 项…

在Pycharm中使用GitHub的方法步骤

文章目录 前言一、配置Pycharm二、建立远程仓库并提交代码三、在github中查看上传的新仓库四、使用pycharm克隆github仓库五、在pycharm内进行git的相关操作关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源…

【C++】三大特性 --- 继承的详细讲解

目录 1.继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6.继承与静态成员 7.复杂的菱形继承及菱形虚…

从0到1构建智能分布式大数据爬虫系统

文章目录 1. 写在前面2. 数据获取挑战3. 基础架构4. 爬取管理5. 数据采集6. 增量与去重设计 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐…

win10的系统下实现SUSTechPOINTS环境搭建

** win10的 标题系统下实现SUSTechPOINTS环境搭建 ** 参考文档&#xff1a; doc/install_from_source.md 张金来/SUSTechPOINTS - Gitee.com 在win10的系统下搭建**SUSTechPOINTS环境 1 克隆代码 git clone https://github.com/naurril/SUSTechPOINTS2 安装环境 2.1 创…

【EtherCAT详解】基于Wireshark的EtherCAT帧结构解析

写在前面 EtherCAT的报文比较繁琐,且一些参考书籍错误较多,且晦涩难懂,对于初学者,很难快速的入门。本文适用于有一定基础的研究者,如对报文有一些研究、对canopen协议有一定了解、并且对TwinCAT有了解的研究者。当然,对于初学者来说,也是很好的引导,少走很多弯路。本…

css 字体添加外轮廓

color: #ffeb3b; -webkit-text-stroke: 10px transparent; background: linear-gradient(90deg,#5d3d02f5,#5d3d02f5,#5d3d02f5,#5d3d02f5,#5d3d02f5,#5d3d02f5,#5d3d02f5) top left / 100% 100%; -webkit-background-clip: text;