应用层自定义协议(组织数据的格式)

news2024/12/26 14:55:54

概念

        在进行网络传输数据的时候,通常是将要传输的数据组织成一个字符串,再将字符串转换为一个字节流进行网络传输数据,而数据组织的格式是多种多样的,我们只需要保证,客户端和服务器对于字符串的组织和解析统一即可

现有的数据组织格式

        由于只需要保证客户端和服务器对于字符串的组织和解析统一即可,所以对于数据的组织格式是多种多样,天马行空的,所以有大佬就提出了现成的数据组织格式

        一.xml格式

                xml格式例子

        

        上图是xml格式的示例,格式有点像前端的html和css,用了很多的标签采用键值对(key-value)的形式非常清晰的把结构化数据表示出来了

        但是缺点也很明显,表示数据需要引入大量的标签,看起来很繁琐,同时由于在进行网络传输的时候标签也需要一起进行传输,所以会占用不少的网络带宽(国内最贵的硬件资源,就是网络带宽)所以现在xml格式以及没有多少地方会使用了

        二.json格式

        json格式例子

        上图是json格式的示例,在json中,使用{ }表示键值对,使用[ ]表示数组,数组里的每一个元素,可以是数字,可以是字符串,还可以是其他的{ }或[ ]

        在json数据组织格式中使用的核心思路也是键值对(key-value),很明显,json组织数据的格式比xml清新很多,这是当前最主流使用的一种网络传输数据的格式,未来在实际开发中会经常用到json格式的数据

        但是即使是json格式来组织数据依然会引入一些标签,在传输数据的时候占用部分的网络带宽,这也是json格式组织数据的一个小小的缺点

        三.protobuffer格式

        这是谷歌提出的一套,二进制的数据序列化方式,使用二进制的方式,约定某几个字节,表示哪个属性,这样就不需要引入标签,就可以最大限度的节省空间,就可以在传输数据的时候只传输确实需要的数据,节省网络带宽,最大化效率

        但是也有缺点,二进制数据是无法用肉眼观察的,不方便调试,使用起来比较复杂,需要专门编写一个proto文件(有自己一系列的语法规则),描述数据的格式咋样的,再进一步的通过大佬提供的工具,把proto文件转换成一些代码,再嵌入到程序中使用

实际开发中是开发效率重要还是运行效率重要

        而在我们实际开发中是开发效率重要还是运行效率重要呢,通常来说是开发效率重要,因为想要提高运行效率,升级硬件也是一种重要手段,不需要花太多的钱,而想要提高开发效率,就得招聘更多的程序猿,在软件开发领域中,人力成本,永远是最贵的,所以通常对于运行效率没有严苛要求的话,我们还是使用json格式来组织数据更多一点

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

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

相关文章

使用mysql、java开发的平台软件一键安装

前言 一般web项目会使用mysql数据库、java开发应用程序打包成jar包。 有些项目会需要导入初始化的行政区域信息。 流程图 说明 1. 脚本中提供变量去配置当前项目的区域 2. 安装包里需要包含全国所有的区域信息 3. 运行程序的时候就可以根据配置 ,调用接口&am…

Linux fork 和 exec 联合使用创建一个全新的进程

复制和替换结合在一起(forkexec)是产生一个新进程的主要方式。 将复制和替换结合在一起(forkexec): 先fork,使系统中多出一个进程,默认情况下,fork之后,父进程和子进程的…

爬虫逆向实战(十四)--某培训平台登录

一、数据接口分析 主页地址:某培训平台 1、抓包 通过抓包可以发现登录是表单提交到j_spring_security_check 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个j_password加密参数 请求头是否加密? 无响应是…

【bug】Unity无法创建项目

bug UnityHub无法创建项目 UnityHub无法创建项目 出现的问题:在创建新项目时弹出来一个 无法创建项目 尝试的方法: 刷新许可证 ❌没用退出账号重新登陆 ❌没用重启电脑 ❌没用 最后发现是什么问题呢? 2021.3.3这个版本我之前在资源管理器中…

mysql binlog 回滚

mysqlbinlog 严格来说mysqlbinlog 不能算回滚,他只是将过去的数据修改记录 重新执行一遍,但是从结果上来看,他也算把数据恢复到任意时间点了,举例来说在昨天的某一刻误删除了一条数据,导致其他数据存储都是异常&#…

C++Qt动态增加垂直滚动条

本博文源于笔者正在工作的一个小内容,内容涉及到为qt动态增加垂直滚动条。文章分为三个部分,问题起源,问题解决方案,问题解决成功效果。思路清晰,文章干货满满,复制源码即可使用。 问题起源 qt中一个页面…

0143 串

目录 4.串 4.1串的定义和实现 4.2串的模式匹配 部分习题 4.串 4.1串的定义和实现 4.2串的模式匹配 部分习题 1.设有两个串S1和S2,求S2在S1中首次出现的位置的运算称为() A.求字串 B.判断是否相等 C.模式匹配 D.连…

7-10 奇偶分家

分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定N个正整数,请统计奇数和偶数各有多少个? 输入格式: 输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。 输…

DNNGP模型解读-early stopping 和 batch normalization的使用

一、考虑的因素(仅代表个人观点) 1.首先我们看到他的这篇文章所考虑的不同方面从而做出的不同改进,首先考虑到了对于基因组预测的深度学习方法的设计 ,我们设计出来这个方法就是为了基因组预测而使用,这也是主要目的&…

leetcode 力扣刷题 数组交集(数组、set、map都可实现哈希表)

数组交集 349. 两个数组的交集排序+双指针数组实现哈希表unordered_setunordered_map 350. 两个数组的交集Ⅱ排序 双指针数组实现哈希表unordered_map 349. 两个数组的交集 题目链接:349. 两个数组的交集 题目内容如下,理解题意&#xff1a…

C++之std::pair<uint64_t, size_t>应用实例(一百七十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

零售行业供应链管理核心KPI指标(三)

完美订单满足率和退货率 完美订单满足率有三个方面的因素影响:订单按时、足量、无损交货。通常情况下零售企业追求线上订单履行周期慢慢达到行业平均水平,就是交付的速度变快了,这个肯定是一件好事情,趋势越来越好。 同时&#…

前端图片转base64,并使用canvas对图片进行压缩

目录 1.图片转base64的应用场景 2.图片转base64代码 3.对上传的图片进行压缩 1.图片转base64的应用场景 图片转base64通常用在用户上传图片的情况下使用,他的作用就是让用户看到预览的图片不受网络的影响。 这是传统的文件传输的流程:首先是用户选择…

浅析基于视频汇聚与AI智能分析的新零售方案设计

一、行业背景 近年来,随着新零售概念的提出,国内外各大企业纷纷布局智慧零售领域。从无人便利店、智能售货机,到线上线下融合的电商平台,再到通过大数据分析实现精准推送的个性化营销,智慧零售的触角已经深入各个零售…

牛客网华为OD前端岗位,面试题库练习记录02

题目一 删除字符串中出现次数最少的字符(HJ23) JavaScript Node ACM 模式 const rl require("readline").createInterface({ input: process.stdin }); var iter rl[Symbol.asyncIterator](); const readline async () > (await iter.next()).value;void (asyn…

【JavaEE基础学习打卡04】JDBC之MySQL数据库安装

目录 前言一、JDBC与数据库二、MySQL数据库1.MySQL数据库2.MySQL服务下载安装3.MySQL服务启动停止4.MySQL命令 三、MySQL客户端安装总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持…

Markdown编辑器 Mac版Typora功能介绍

Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。 Typora Mac版除了支持常见的Markdown语法外&#…

数据库连接池(c3p0和德鲁伊)

目录 连接池介绍 c3p0连接池 传统方法引入jar包 配置文件 德鲁伊连接池 德鲁伊工具类 传统jdbc数据库使用DriverManger来获取,每次向数据库建立连接需要将Connection加载到内存中,频繁的操作会造成占用很多系统资源,造成服务器崩溃&…

【计算机网络】13、ARP 包:广播自己的 mac 地址和 ip

机器启动时,会向外广播自己的 mac 地址和 ip 地址,这个即称为 arp 协议。范围是未经过路由器的部分,如下图的蓝色部分,范围内的设备都会在本地记录 mac 和 ip 的绑定信息,若有重复则覆盖更新(例如先收到 ma…

python编程等级证书,python程序员证书

大家好,本文将围绕python编程等级证书展开说明,python证书含金量是一个很多人都想弄明白的事情,想搞清楚python程序员证书需要先了解以下几个事情。 全文共4231字,预计学习时长10分钟 图源:unsplash 在数据科学职业生涯…