热门标签 | 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直观地展示了上文提到的几种协议之间的优劣异同。


推荐阅读
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
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社区 版权所有