自定义协议

应用层

有许多现成的协议(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,根据位置和长度,区分每个属性).
  • 适用于对于性能要求更高的场景.牺牲了开发效率,换来了运行效率.

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

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

问:

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

答:开发效率更重要!

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Rating)

提供在给定范围内选择评分的组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Rating(options?: { rating: number, indicator?: boolean }) 从API version 9开始&#…

HTTPS(超文本传输安全协议)工作过程

一、简述HTTPS HTTPS超文本传输协议(全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&#x…

数据库——书籍+内容0.1版本

背景:将一本书,存入我们的数据库中,并可以查出来 采用:第三范式(3NF)设计模式 设计数据库模板 第一范式(1NF):确保表的每一列都是不可分割的原子数据项。 第二范式&…

【分布式websocket 】前端vuex管理客户端消息crud!使用localStorage来存储【第19期】

前言 聊天系统客户端是要存储消息的,因为所有所有的历史消息都从服务器拉的话一方面服务器压力大,另一方面也耗费用户流量。所以客户端存储消息是势在必行的。如何存储呢上一篇文章也写了,大概就是浏览器的话是localStorage或者IndexedDB。然…

Docker 学习笔记一

一、什么是docker Docker 是一个基于轻量级虚拟化技术的容器,整个项目基于Go语言开发;Docker是一个C/S架构,后端众多模块各司其职,docker的daemon是运行在主机上通过client可以进行通信。 docker 由三部分组成:镜像(…

【第六章】简单网络实现手写数字分类-编程实现

前言 让我们编写一个程序,学习如何使用随机梯度下降和MNIST训练数据来识别手写数字。我们将通过一个简短的Python程序来实现这一点,只需要74行代码!首先我们需要获取MNIST数据。 本章代码和数据下载地址: https://download.csdn.…

碳素光线疗法与中医

看得见的穴位碳素光线疗法 最近日本的医疗随着科学技术的发达,在基础研究、临床各领域取得了显著的发展。日本人的平均寿命比战前大幅延长,结核及其他疑难杂症、癌症等疾病也在逐渐被压制。其中,作为癌症的辅助疗法,日本癌症学会等…

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’

【PyTorch】成功解决ModuleNotFoundError: No module named ‘torch’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…

蓝桥杯单片机快速开发笔记——独立键盘

一、原理分析 二、思维导图 三、示例框架 #include "reg52.h" sbit S7 P3^0; sbit S6 P3^1; sbit S5 P3^2; sbit S4 P3^3; void ScanKeys(){if(S7 0){Delay(500);if(S7 0){while(S7 0);}}if(S6 0){Delay(500);if(S6 0){while(S6 0)…

Flink 集群部署模式

文章目录 前言一、会话模式(Session Mode)二、单作业模式(Per-Job Mode)三、应用模式(Application Mode) 前言 Flink支持多种集群部署模式,以满足不同场景和需求。以下是Flink的主要集群部署模…

Rust学习02:推荐一本入门书,免费的

都说Rust的学习曲线很陡峭,试过才知雀实不容易。 先说我的基础,非科班,自学Python,写过几个小程序。 我买书从来不扣扣嗖嗖的,所以先啃了几本Rust的入门书,包括: Tim McNamara的《Rust实战》&am…

javaEE——线程的等待和结束

文章目录 Thread 类及常见方法启动一个线程中断一个线程变量型中断调用 interrupt() 方法来通知观察标志位是否被清除 等待一个线程获取当前线程引用休眠当前线程 线程的状态观察线程的所有状态观察 1: 关注 NEW 、 RUNNABLE 、 TERMINATED 状态的切换 多线程带来的风险为什么会…

基于SpringBoot框架实现的B2B平台的医疗病历交互系统

采用技术 基于SpringBoot框架实现的B2B平台的医疗病历交互系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员角色 医院管理 医院注册 医院文…

pytorch 入门基础知识一(Pytorch 01)

一 深度学习基础相关 深度学习三个主要的方向:计算机视觉,自然语言,语音识别。 机器学习核心组件:1 数据集(data),2 前向传播的model(net),3 目标函数(loss), 4 调整模型参数和优化函数的算法…

C#混淆心得

C#混淆心得 近期遇到混淆C#代码的需求,在网上找了很多办法,在此记录一下。 混淆的本质就是让代码变丑,让别人看不懂。 为什么要混淆: 1.保护核心代码 可以在一定程度上避免别人偷代码,从而保护重要的部分&#xf…

vscode jupyter 如何关闭声音

网上之前搜的zen模式失败 仅仅降低sound失败 #以下是成功方式: 首先确保user和remote的声音都是0: 然后把user和remote的以下设置都设置为off就行了! 具体操作参考 https://stackoverflow.com/questions/54173462/how-to-turn-off-or-on-so…

传输层/UDP/TCP协议

再谈端口号 TCP/IP协议用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”,这样一个五元组来标识一个通信(可以用netstat -n来查看)。 端口号的划分和知名端口号 我们之前就说过&am…

综合知识篇05-设计模式考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例…

【Java】容器|Set、List、Map及常用API

目录 一、概述 二、List 1、List的常用API 2、ArrayList 3、List遍历 三、Set 1、Set的常用方法: 2、HashSet 3、遍历集合: 四、Map 1、Map常用API 2、HashMap 3、遍历Map 五、迭代器 一、概述 在Java中所有的容器都属于Collection接口下的内容 1…

如何监控用户对网站的操作行为?

需求: 1、对所有用户的操作进行监控,包括用户行为的录制 2、通过用户操作热度地图,来监控每个功能的使用频率,从而来决策产品的下一步迭代 一、浏览器自带的录频方法 MediaDevices.getUserMedia() 二、html2canvas页面截屏方法 …