热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现物联网的核心技术为(简述物联网的核心技术)

JSONJSON中文全称是JavaScript对象标记语言,在这门语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。其语法规则是:


约翰先生


JSON中文的全名是Javascript对象标记语言,在该语言中全部为对象。 因此,所有支持的类型(如字符串、数字、对象和数组)都可以用JSON表示。 其语法规则如下


对象表示为键值对; 数据由逗号分隔; 中括号保存对象; 方括号用于保存数组。 JSON的层次结构简洁、清晰、易读、便于书写,同时也便于机器的分析和生成,有效地提高了网络的传输效率。


对于单片机开发者来说,主流的微控制器软件开发工具Keil提供了JSON库,可以用于STC、STM32等微控制器开发,因此可以用微控制器分析JSON


如果使用JSON库生成或解析JSON字符串很麻烦,也可以直接使用c语言sprintf生成JSON字符串,如下所示:


sprintf(buf,() (字符串() : ) %s ),()值) ) :%d ),)赫鲁罗世界! ) )。12345;


1现在生成了“字符串”:“问候世界”。 ”、“值”:12345 }现在是JSON字符串。


XML


MQTT协议只负责通信部分,用户协议可以自己选择,当然也可以选择复杂冗长的XML格式。 但是,如果选择MQTT XML,为什么不考虑更改为XMPP呢?


总结


综上所述,MQTT JSON是目前最好的方案。 还考虑了服务器端开发人员和设备端开发人员的开发成本,包括协议简洁、清晰、易读、分析和生成等。


有关MQTT的云平台和工具


支持MQTT的云平台


目前,百度、阿里、腾讯的云平台逐渐拥有了物联网开发套件。 腾讯物联平台内测中,AlibabaCloud物联网套件内测中,两者都需要进行申请试用,但百度云物联网套件支持MQTT,暂时免费除了BAT三先生之外,我们还将介绍支持MQTT的其他物品的互联网云平台。


OneNET云平台: OneNET是由中国移动打造的PaaS物联网开放平台。 平台可以帮助开发者轻松访问设备和连接设备,快速完成产品开发部署,为智能硬件、智能家居产品提供完美的物联网解决方案。 OneNET云平台于2014年10月正式上线。 云:云总线是一种跨平台双向实时通信系统,为物联网、APP、Web提供实时通信服务。 云基于MQTT,并支持Socket.IO协议和rest风格的应用程序。 qtt服务器


如果不想使用云平台,只想纯粹玩MQTT,或者在内部网监视设备,可以自己在本地部署MQTT服务。 介绍几种MQTT服务器。


ache-Apollo :以ActiveMQ为基础开发的代理服务器。 支持STOMP、AMQP、MQTT、Openwire、SSL、WebSockets等各种协议,提供后台管理页面供开发人员管理和调试。 EMQ:EMQ 2.0被称为兆级开源MQTT消息传递服务器,是基于Erlang/OTP语言平台开发的,支持大规模连接和分布式集群,是订阅模型的开源MQTT HiveMQ :主要用于企业和新兴的机械到机械的M2M通信和内部传输,最大限度地满足可扩展性、易管理性、安全特性,提供免费个人版的企业级MQTT代理。 HiveMQ提供了开源插件开发软件包。 Mosquitto :是实现消息推送协议MQTT v3.1的开源消息代理软件,提供轻量级、可发布/可订阅的消息推送模式。 MQTT调试工具


在知道各平台的MQTT的同时,也可以自己在内部网部署MQTT服务器。 那么,接下来如果没有调试工具该怎么办呢? 用喜欢的语言写一个吗? 当然不需要。 MQTT调试工具应考虑使用基于web套接字的浏览器MQTT客户端HiveMQ的MQTT客户端—— hive MQ web套接字客户端,以支持主题的订阅和发布。


MQTT和其他协议


现在各平台都开始支持MQTT协议,那么MQTT与其他协议相比有什么好处呢? 物联网设备可以使用其他协议吗? 以下是MQTT与其他部分协议的比较,仅供参考。


MQTT和TCP套接字


虽然MQTT在TCP层上运行,两者之间看起来没有可比性,但我认为有必要进行描述,因为大多数从事硬件和嵌入式开发的工程师都是在TCP层直接通信的。 从事嵌入式开发的人应该知道面向嵌入式的开源TCP/IP协议栈LwIP。 LwIP在嵌入式设备具有完整的TCP/IP功能的同时,保证了协议栈对处理器资源的有限消耗。 通常在几十KB的RAM和40KB左右的ROM上工作。


也就是说,只要嵌入式产品使用的是LwIP,就可以支持TCP/IP协议栈,进而使用MQTT协议。


由于TCP协议存在数据包粘贴和分包问题,因此数据传输需要自定义协议。 如果传输的数据报超过最大分组长度(MSS ),则必须在协议中定义消息长度字段,以便接收方可以完全通过缓冲区接收消息。 简单的协议定义:消息头的消息长度消息正文。


当然,使用MQTT协议时,不需要考虑这个问题。 这些MQTT已经处理完毕,MQTT可以一次发送多达256MB的数据,无需考虑数据包的分包问题。


也就是说,TCP和MQTT本身并不矛盾,但需要基于套接字开发处理更多的事情

,而且大多数嵌入式开发模块本身也只会提供Socket接口供厂家自定义协议。

MQTT与HTTP

HTTP最初的目的是提供一种发布和接收HTML页面的方法,主要用于Web。HTTP是典型的C/S通讯模式:请求从客户端发出,服务端只能被动接收,一条连接只能发送一次请求,获取响应后就断开连接。该协议最早是为了适用Web浏览器的上网浏览场景而设计的,目前在PC、手机、Pad等终端上都应用广泛。由于这样的通信特点,HTTP技术在物联网设备中很难实现设备的反向控制,不过非要实现也不是不行,下面看一下Web端的例子。

目前,在微博等SNS网站上有海量用户公开发布的内容,当发布者发布消息,数据传到服务器更新时,就需要给关注者尽可能的实时更新内容。Web网站基于HTTP协议,使用HTTP协议探测服务器上是否有内容更新,就必须频繁地让客户端请求服务器进行确认。在浏览器中要实现这种效果,可以使用Comet技术,Comet是基于HTTP长连接的“服务器推”技术,主要有两种实现模型:基于AJAX的长轮询(long-polling)方式和基于Iframe及htmlfile的流(streaming)方式。这两种技术模型在这里不详细展开,有兴趣的读者可以查阅相关资料。

如果要实现设备的反向控制,可能就要用到前面提到的Comet技术。由于需要不断的请求服务器,会导致通信开销非常大,加上HTTP冗长的报文头,在节省流量上实在没有优势。

当然,如果只是单纯地让设备定时上报数据而不做控制,也是可以使用HTTP协议的。

MQTT与XMPP

最有可能与MQTT竞争的是XMPP协议。XMPP(可扩展通讯与表示协议)是一项用于实时通讯的开放技术,它使用可扩展标记语言(XML)作为交换信息的基本格式。其优点是协议成熟、强大、可扩展性强。目前主要应用于许多聊天系统中,在消息推送领域,MQTT和XMPP互相竞争。下面列举MQTT与XMPP各自的特性:

XMPP协议基于繁重的XML,报文体积大且交互繁琐;而MQTT协议固定报头只有两个字节,报文体积小、编解码容易;XMPP基于JID的点对点消息传输;MQTT协议基于主题(Topic)发布\订阅模式,消息路由更为灵活;XMPP协议采用XML承载报文,二进制必须进行Base64编码或其他方式处理;MQTT协议未定义报文内容格式,可以承载JSON、二进制等不同类型报文,开发者可以针对性的定义报文格式;MQTT协议支持消息收发确认和QoS保证,有更好的消息可靠性保证;而XMPP主协议并未定义类似机制;在嵌入式设备开发中大多使用的是C语言开发,C语言解析XML是非常困难的。MQTT基于二进制实现且未定义报文内容格式,可以很好的兼顾嵌入式C语言开发者;而XMPP基于XML,开发者需要配合协议格式,不能灵活开发。 综上所述,在嵌入式设备中,由于需要一个灵巧简洁,对设备开发者和服务端开发者都友好的协议,MQTT比XMPP更具有优势。

MQTT与CoAP

CoAP也是一个能与MQTT竞争的协议。其模仿HTTP的REST模型,服务端以URI方式创建资源,客户端可以通过GET、PUT、POST、DELETE方式访问这些资源,并且协议风格也和HTTP极为相似,例如一个设备有温度数据,那么这个温度可以被描述为:

CoAP://:/sensors/temperature

其中为设备的IP,为端口。

不过,如果使用CoAP可能会让物联网后台的情况变得复杂,比如MQTT可以实现一个最简单的IoT架构:Device + MQTT服务器 + APP,手机端或Web端可以直接从MQTT服务器订阅想要的主题。而CoAP可能需要这样的架构:CoAP + Web + DataBase + App,使用CoAP必须经过DataBase才能转给第三方。

至于CoAP和MQTT孰优孰劣,这里不作定论。不过目前来说,CoAP资料还是略少。而且,MQTT除了可以应用于物联网领域,在手机消息推送、在线聊天等领域都可以有所作为。

小结

经过以上的比较,我们可以得出如下结论:MQTT基于异步发布/订阅的实现解耦了消息发布者和订阅者,基于二进制的实现节省了存储空间及流量,同时MQTT拥有更好的消息处理机制,可以替代TCP Socket一部分应用场景。相对于HTTP和XMPP,MQTT可以选择用户数据格式,解析复杂度低,同时MQTT也可用于手机推送等领域。手机作为与人连接的入口,正好建立了人与物的连接,可谓一箭双雕。当然,其他协议也可以作为一个辅助的存在,HTTP可以为只需定时上传数据的设备服务,CoAP则更适用于非常受限的移动通信网络,表3直观地展示了上文提到的几种协议之间的优劣异同。


推荐阅读
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
author-avatar
情之瞬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有