MQTT(消息队列遥测传输)最初由 IBM 于上世纪 90 年代晚期发明。它最初的用途是将石油管道上的传感器与卫星相链接,所以 MQTT 从诞生之初就是专为受限设备和低带宽、高延迟或不可靠的网络而设计,它使用了发布订阅模型,在空间和时间上解耦了消息的发送者与接收者,并且基于 TCP/IP 提供稳定可靠的网络连接,拥有非常轻量的报头以减少传输开销,支持可靠消息传输,可以说天生就满足了物联网场景的各种需求。在 MQTT 311 发布并成为 OASIS 标准的四年后,MQTT 50 正式发布,这是一次重大的改进和升级,它的目的不仅仅是满足现阶段的行业需求,更是为行业未来的发展变化做了充足的准备。2019 年 3 月,MQTT 50 成为了新的 OASIS 标准。
面对迅速增长的设备数量和层出不穷的需求,OASIS MQTT 技术委员会需要从繁杂的需求中提取出通用部分,将其纳入标准规范,并且尽可能不增加开销或降低易用性,在不增加不必要的复杂性的前提下提高性能和易用性。
最终,OASIS MQTT 技术委员会为 MQTT 50 添加了大量的全新功能与特性,50 成为 MQTT 有史以来变化最大的一个版本。在这里,我们将列举一些比较重要的特性:
完整的新属性列表包含在协议标准的附录C,您可以访问以下网址了解详情: >
物联网 (internet of thing) ,表示的是可以把一些带某些传感器的设备(终端),接入到互联网的行为。
通过互联网连接这些设备,这些设备就能够互相协作。
而 MQTT 就是这些设备之间数据通信的一个基于 TCP/IP 的协议。
每个终端都和实现了 MQTT 协议的代理/服务器相连。
通过 published MQTT 代理服务器的某个 主题 发送数据。
通过 subscription 从 MQTT 代理服务器获取自己订阅的 主题 数据。
MQTT 协议是一种轻量级的、灵活的网络协议。并且非常适合 IOT 的场景。
大多数开发人员已经熟悉了 >MQTT-SN的架构如图1所示。有3种类型的MQTT-SN组件:MQTT-SN客户端、MQTT-SN网关、MQTT-SN转发器。MQTT-SN客户端使用MQTT-SN协议连接到MQTT-SN网关,再连接到MQTT服务端。MQTT-SN网关可以集成到MQTT服务端里。如果是做为独立的网关,则MQTT服务端和MQTT-SN网关间将采用MQTT协议,它的主要功能就是MQTT和MQTT-SN之间的转换。
当客户端所在的网络无法直接连接到网关时,客户端也可以通过转发器来存取网关。转发器将它在无线网络侧所接收到的MQTT-SN侦进行简单封包,然后原封不动地发送给网关;相反的,它将从网关侧接收到的侦解封,然后同样原封不动地发送到客户端。
基于网关在MQTT和MQTT-SN间转发所起的作用,我们可以区分出2种类型的网关:透明网关和集聚网关。
对于每个连接的MQTT-SN客户端,透明网关将会和MQTT服务端建立并维护一个MQTT连接。该MQTT连接将会单独为端到端通信保留,而且对于客户端和服务端间的消息交换是透明的。有多少MQTT-SN客户端连接到网关,在网关和服务端之间就有多少MQTT连接。透明网关在两协议间将扮演语法翻译器的角色。因为MQTT-SN客户端和MQTT服务端间的所有消息交换是端到端的,所以服务端可以向客户端提供其实现的所有功能和特性。
虽然和集聚网关比起来,透明网关的实现比较简单,但是它要求服务端支持为每个活动的客户端保持一个单独的连接。一些MQTT服务端实现可能在能支持的并发连接数上有所限制。
不同于每个连接的客户端都有一个MQTT连接,集聚网关将只有一个到服务端的MQTT连接。MQTT-SN客户端到集聚网关的所有信息交换将只到网关。由网关决定哪些信息将进一步传递到服务端。虽然集聚网关的实现比透明网关更复杂,但它在拥有大量传感器的无线传感网络中是非常有用的,因为它减少了服务端必须并发支持的MQTT连接数。
服务器配置错误:确保您的 MQTT 服务器已经正确配置,并且已经启动。您可以检查 MQTT 服务器的配置文件,确保 MQTT 服务器的端口号、认证方式、消息格式等参数都正确。
客户端配置错误:确保您的客户端已经正确配置,并且已经启动。您可以检查 MQTT 客户端的配置文件,确保 MQTT 客户端的 URL、端口号、认证方式、消息格式等参数都正确。
网络问题:确保您的网络连接正常,并且可以访问 MQTT 服务器。如果您的网络连接不稳定或者无法访问 MQTT 服务器,可能会导致连接失败。
配置文件错误:确保您的配置文件没有错误。如果您的配置文件中有错误或者不正确的参数,可能会导致连接失败。
如果您已经确保了以上几个方面都没有问题,但是仍然无法连接到 MQTT 服务器,您可以尝试以下几个步骤:
检查 MQTT 服务器的配置文件:确保您的 MQTT 服务器的配置文件没有错误。如果您的配置文件中有错误或者不正确的参数,可能会导致连接失败。
检查 MQTT 客户端的配置文件:确保您的 MQTT 客户端的配置文件没有错误。如果您的配置文件中有错误或者不正确的参数,可能会导致连接失败。
检查网络连接:确保您的网络连接正常,并且可以访问 MQTT 服务器。如果您的网络连接不稳定或者无法访问 MQTT 服务器,可能会导致连接失败。
检查 MQTT 服务器的状态:确保您的 MQTT 服务器已经正确启动,并且可以正常工作。如果您的 MQTT 服务器出现了故障,可能会导致连接失败。
如果以上步骤都没有解决问题,您可以尝试查看 MQTT 服务器的日志,以了解更多有关连接失败的信息。同时,您也可以尝试使用其他的 MQTT 客户端或者其他的 MQTT 服务器来连接,以确保您的连接是正常的。
简单回答一下,MQTT(MQTelemetryTransport)是针对物联网而设计的,如手机对家里的智能开关,而WebSocket是针对浏览器与服务器之间而设计的两者基本上是两个世界的东西
MQTT只是一个接口,让两个"物件"能够透过TCP协议通讯,但并没有规定(在应用层面上)通讯中要怎样"对答",如pop3邮件伺服器会有:
S:220我是xxx服务器
C:HELOmyServer
S:250Nicetomeetyou
C:authlogin
这些是没有硬性被定义的,两个"物件"之间要怎_"聊天",由你自己来定
WebSocket则是一个>
以上,只是很概念的说法,便於你理解,详细你得自己翻下文献了
先决条件在开始本教程之前,您需要:
一个Ubuntu 1604服务器,具有非root,sudo启用的用户和基本防火墙设置,如在这个Ubuntu 1604服务器设置教程中详细描述的。
指向您的服务器的域名,按照如何使用DigitalOcean设置主机名 。 本教程将使用mqttexamplecom贯穿始终。
第1步 – 安装Mosquitto
Ubuntu 1604在默认软件存储库中有一个相当新版本的Mosquitto。使用非root用户登录,并使用apt-get安装Mosquitto。
sudo apt-get install mosquitto mosquitto-clients
默认情况下,Ubuntu将在安装后启动Mosquitto服务。让我们测试默认配置。我们将使用我们刚刚安装的一个Mosquitto客户端订阅我们的代理上的一个主题。
主题是您向其发布消息和订阅的标签。 它们被布置为层次结构,因此,例如,您可以具有sensors/outside/temp和sensors/outside/humidity 。如何安排主题取决于你和你的需要。在本教程中,我们将使用一个简单的测试主题来测试我们的配置更改。
第二次登录到您的服务器,因此您有两个端子并排。在新终端中,使用mosquitto_sub订阅测试主题:
mosquitto_sub -h localhost -t test
-h用于指定MQTT服务器的主机名, -t是主题名。 由于mosquitto_sub正在等待消息到达,因此在按ENTER后没有输出。切换回您的其他终端并发布消息:
mosquitto_pub -h localhost -t test -m "hello world"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)