了解了物联网项目的大体结构之后,我们先从物联网的联网相关部分说起,这也是物联网项目中的关键环节。在联网环节中,不仅要考虑如何连接上,还要考虑连接后如何传输数据。换句话说数据是以什么格式进行传输,对系统压力和稳定性以及整体项目更有利。在互联网项目开发中,多数情况大家习惯了用JSON数据包来进行网络两端的数据交互。转入到物联网项目中也自然会想到用JSON来交换数据,一些大厂的物联网平台也是这样做的,但是同时又提供了一种自定义字节串(字节流)的方式进行数据交换,这节我们就说这两个的差别。

  字节(Byte),常用的是八位的字节,即它包含八位的二进制数(关于进制将在下一节中讨论),也是互联网传输数据的基本单位。在C语言中就是unsigned char类型,一个8位的无符号整数,数值范围是0-255之间。字节串(也可以理解为字符串,后面会有针对性讨论)也就是一个unsigned char类型的数组。其它编程语言中也有相对应数据类型,如Python语言中的bytes和bytearray、Go语言中的uint8(别名byte)、Java语言中的byte、PHP语言中以字节流方式接收到的字符串等。网络中每传输一组数据,实际就是在传输N多个字节,至于这个字节代表的是什么,是由协议标准来定义的(后面会专门讨论协议相关的),但是传输过程是不需要理会它是代表什么的,只要按照原值传递就可以了。磁盘保存文件也是如此,无论是文本文件,还是图像音频文件,磁盘只是按照每个字节对应的8个位来记录0和1即可,不会去理会这个是什么类型的文件,因为这是数据的最底层数值。

  下面举一个例子,设备要上报给服务端一个烘烤房的室内温度值、工作时长和当前的电热器的开关状态,假设当前室温是126℃,已经工作105分钟,当前电热器状态是开启的。

  常用JSON数据形式如下:

{"temp": 126,"time":105,"status": true
}

  总计37个字节需要传输,这里面最有价值的就是“126”、“105”和“true”,如果按照短指令格式传输则是如下形式:

0xXX 0xXX 0x7E 0x69 0x01 0xXX        //用16进制描述的,用10进制也可以,只是16进制是每个字节等宽书写,便于交流

  总计6个字节需要传输,第一个0xXX是标志头,第二个0xXX是指令代号,第三个0xXX是标志尾,取值在0x00–0xFF之间自己定义(自有协议指定后面会专门讨论)。0x7E就是10进制的126,0x69就是10进制的105,0x01就是10进制的1,三个参数已经携带过去了,只需用顺序位置定义具体代表什么即可。

  在物联网信息交互中,复杂的数据关系嵌套很少用到,所以JSON的优势就没那么明显了,反而造成传输字节变得太长。因为物联网的联网工作环境相对于互联网应用要复杂和不稳定的多,所以就需要尽可能的减少单次数据传输的时间,来提高数据传输的可靠性。那么在数据结构上,使用短指令就有明显的优势。同时也减少了服务器并发的拥堵时间,单位时间内服务端接收的每条指令字节数越少,可接收处理的条数就越多,也相当于并发能力越强,承载能力越强。

  由于传输的是字节值,这个值直接代表了需要上报信息的具体数值,那么代码在获取的时候,直接以字节形式读取即可,不需要编码转换等过程(不同开发语言获取方法不同),也减少了计算量,进一步提高服务器的承载能力。

  在说一下为什么是优选MQTT或CoAP,而不是直接使用HTTP。一个主要原因还是因为数据量的原因,一个HTTP请求无论需要携带的内容有多少,单信息头就会有几百字节,这对物联网要求的简短快速结束一次通信来说,是太多了。而MQTT或CoAP的信息头只有几个字节,显然针对的场景是不同的。大的数据量就会占用长的时间传输,就要求这段时间网络必需保证稳定畅通,否则这一个数据包就会传输失败。再者HTTP是无状态请求,不利于实现服务端向硬件设备发送指令的及时传送。

  写习惯了互联网的WEB项目,可能有人会说使用JSON便于维护,便于数据交换和沟通,这是高可维护的一项啊。之所以本文标题说是谈思维的转变,主要就是体现在这里。前面我强调过,物联网不是单纯的服务器上跑代码,要有硬件设备与之配套运行。而硬件设备往往又是海量存在的,这就是涉及到成本问题。实际上制造硬件设备的企业,对成本控制是很严格的,只要技术性能上能满足,那么能用8位单片机的绝对不用32位单片机,能用小内存的绝不用大内存的,主张够用即可(非量产的产品或抬杠的请忽视这句话,看着就好)。因为成本不同,除非产品是不需要量产普及的。那么单片机的开发中,处理JSON数据虽然有现成的函数库可用,但是对硬件要求就提高了不少,成本自然就上升了。还有处理速度也没有短指令那么快,虽然单片机提高了一个档次,但是因为要处理JSON数据,接收和发送指令时的速度并没有得到显著提升。所以不能因为用习惯了JSON就不顾及其他因素。

  关于可维护性,这个体现在开发过程中相关工具和文档建立的是否够完备,如果为项目中的短指令创建专门的生成和解析工具,并有完备的文档同步更新,这同样会事半功倍,维护性反而更好(后面会介绍如何创建短指令工具)。

  综上所述,想要提高物联网连接服务器性能,尽可能加大单台服务器的接入量(短指令代替JSON数据包的思路进行开发,对服务器承载能力扩大不只几倍,优化好会提升10几倍甚至更高),那么使用短指令是个必要的选择,再配以相适应的开发方法,会是物联网项目整体性能大幅提升。

  本节完,待续…

转战物联网·基础篇03-从JSON数据到短指令谈思维的转变相关推荐

  1. 转战物联网·基础篇12-了解物联网之物连接相关通信技术(1)

    转战物联网·基础篇12-了解物联网之物连接相关通信技术(1) 一.物连接架构概览 1.通过一张图了解"物连接" 2.网关控制器内部功能 二.硬件设备间组网的物理链路形式 1.有线组 ...

  2. 转战物联网·基础篇13-了解物联网之物连接相关通信技术(2)

    转战物联网·基础篇13-了解物联网之物连接相关通信技术(2) 三.硬件设备间组网的通信技术与通信协议(2) 11.6LoWPAN 12.PROFINET 13.EtherCAT 14.RFID.NFC ...

  3. 转战物联网·基础篇02-物联网中的角儿

      今天的物联网,主要向遥控遥感.智能互联.数据综合.高效安全方向发展.人们对未来的向往总会找到一些漂亮的词语去美化一下,如智能家居.智慧交通.智能医疗.智能电网.智能物流.智能农业.智能电力.智能安 ...

  4. 转战物联网·基础篇01-物联网之我见

      先说一下为什么叫"转战物联网"系列.这个系列文章是写给之前从事互联网开发或嵌入式开发人员,现在想转入物联网项目开发,并想了解物联网开发与互联网开发的区别和必要的新侧重知识点,以 ...

  5. 一些解密必备知识(2)- 基础篇03|解密系列

    一些解密必备知识(2)- 基础篇03 让编程改变世界 Change the world by program   软件安全是信息安全领域的重要内容,本系列视频教程将涉及到软件相关的加密.解密.逆向分析 ...

  6. Cesium基础知识-加载json数据

    viewer = new Cesium.Viewer('cesiumContainer'); //加载json数据生成线 function CreateLineFromJson(params) { / ...

  7. 阿里物联网套件-服务端SDK学习实践(基础篇-12推送数据给设备并得到响应)

    推送数据给设备并得到响应 官方链接 特别注意:该接口目前只适用CCP协议接入的设备,MQTT协议不支持 而CCP(目前华东2节点不支持该功能) RevertRpcRequest和RevertRpcRe ...

  8. 51单片机怎么显示当前时间_51单片机玩转物联网基础篇06-LCD1602液晶显示器

    前言 本节我们开始学习LCD1602,LCD1602是字符型液晶显示屏,在实际项目中应用非常广泛,学完本节就可以逐步开发一些好玩的应用了. 一.基础知识 1.LCD1602简介 LCD1602是字符型 ...

  9. Java基础篇(03):流程控制语句,和算法应用

    本文源码:GitHub·点这里 || GitEE·点这里 一.分支语句 流程控制语句对任何一门编程语言都是非常重要的,Java中基于流程控制程序执行的不同步骤和代码块. 1.IF条件 IF条件语句会根 ...

最新文章

  1. 亮剑.NET的系列文章之.NET实现三层架构(三)
  2. 利用OpenCV+ConvNets检测几何图形
  3. Html5的页面基本结构标签,HTML5:简介和文档基本结构
  4. 新冠图像数据分析论文集合(附链接)
  5. NYOJ 641 摧毁网络
  6. 状压动规_(POJ2817)
  7. org.jeecgframework.core.common.exception.MyExceptionHandler]java.lang.NullPointerException
  8. 2021高值人才职业发展洞察:连接、信任与赋能----“高能”、“高薪”、“高潜”...
  9. 绩效管理这样做,成本减半,员工叫好!
  10. JUC中的原子类总结
  11. matplotlib 2.2.4 has requirement python-dateutil=2.1, but you'll have python-dateutil 1.5
  12. 分享一个MentoHUST for Windows 锐捷认证使用方法,实现不用猎豹wifi第三方流氓软件破解校园网wifi共享限制。
  13. 错误代码0x80004005
  14. 处理反走样常用的四种技术
  15. Guarded Suspension Pattern
  16. 如何使用电脑在线制作闪图?
  17. 好东西硬盘故障率还是西数黑盘,绿盘最低啊
  18. gma 地理空间绘图:(1)绘制简单的世界地图-1.地图绘制与细节调整
  19. 3_Semantic Pitfalls 语义错误
  20. shinelon自动修复此计算机,炫龙 shinelonV5 Pro 笔记本改win7详细图文教程

热门文章

  1. python常见函数sort()对列表元素进行排序
  2. 远程医疗中使用AR眼镜,内窥镜,视频远程诊疗方案
  3. 水平拉滑轮组计算机械效率的题,中考典型题:滑轮组机械效率分类计算(1).doc...
  4. 俞敏洪的一分钟励志演讲
  5. 源站IP暴露了怎么自查?
  6. JobScheduler用法
  7. Linux C中unsigned long与指针的关系
  8. 在所有数据库的所有数据中搜索关键字
  9. android五大布局的作用,Android五大布局与实际应用详解
  10. c++和python哪个好_python和c++哪个好 有什么区别