最后更新:2022-04-17 17:17:59 手机定位技术交流文章
实际联网是网络的一个关键组成部分,但现有的协议缺乏统一的标准。 对于MQTT、MQTT等等来说,它更为普遍。
除其他标准外,如CoAP、DDS和XMP、MQTT(电讯遥测传输协议)应是最常用的标准之一。
MQTT, 即信息阵列遥测传输,是由IBM的Andy Stanford-Clark 于199年创建的。
来自Arcom的Arlen Nipper是为利用卫星网络连接石油管道的项目而设立的,其目的是满足低电耗和廉价网络成本。
由于带宽的必要性,MQTT协议从一开始就包含以下能力:
2010 年,MQTT 3.Version 1是由IBM提供的。在 2014 年,基础设施信息标准促进组织已将《MQTT协定》作为标准予以通过。随着多年的发展,MQTT协议不再局限于嵌入系统。它是宇宙万物大互联网的一部分。
基于TCP协议的申请协议;
实施C/S架构;
使用订阅/分发模式发送和接收语句组合的信息。
三种信息的质量:最多一次、至少一次、只一次;
电文的发送和接收不对称,发件人不必等待收件人答复。
MQTT 以下列方式不同于典型的信件队列 。
MQTT协议可以为工作场所网络中使用的大量低功率、不稳定的材料网络装置提供通信安全。这不是它用来做什么的。在移动互联网世界中,还有许多工作要做:许多Android Apps包括推力功能。一切都基于MQTT。也有一些 IM 迷幻。使用 MQTT 构建。
MQTT通讯通过出版/订阅方式进行,发送者和订阅者均参加。
它们与脱钩没有直接联系;相反,它们需要一个中间人,我们称之为MQTT的经纪人。它仅用于信息目的。
A 典型的 MQTT 信息流看起来是这样的:
发件人称为出版商,订户称为订户。
MQTT 客户端指执行 MQTT 库或代码的任何终端、嵌入设备或服务器 。
根据客户的当前状况,出版商和下标完全属于Clit、Pushlisher或订户。
未收到信件:%s%s%s 当然,客户端既可以是出版商也可以是订户。
MQTT客户图书馆有多种编程语言,包括Android、Arduino、Ruby、C、C++、C#、Go、iOS等。
Java, JavaScript, 和.. NET, 举几个例子。
语言图书馆的执行情况:https://github.com 此片是我们特别报道全球之声的一部分:com/mqtt/mqtt.com/mqtt.com/mqtt.com/mqtt.photo,网址为:ww.wiki/librarias.org/wiki/librarys/librarys。
用于 js 的 节点. MQTT 客户端库, 用于 js, 所以 节点. js, 然后安装
MQTT 客户端. js 软件包节点 :
经纪人接受出版商的信息并将其转发给适当的订户,该订户代表完全的MQTT订阅/分发。
" 核心 " 。 在实践中,MQTT中间商还应包括以下特征:
其一,可横向扩展,例如,通过集群,以便处理大量客户访问;
2. 容易进入公司系统;
三. 监测和保持高可用率是简单易行的。
由Aliun、Tan Tsingyun和Qingyun等云服务供应商提供的MQT服务是明确的。
MQTT 符合上述标准的中间商。
抱歉 日食 org 为公众介绍MQTT Broker
MQTT协议的数据包结构相当基本,MQTT软件包由三部分组成:
固定头(固定页眉):在所有 MQTT 数据集中都存在固定页头,以具体说明数据包的类型和相应的识别资料,并注明数据包。
大小;
变量头( 可变页眉): 在某些类型的 MQTT 数据包中出现, 其内容按类型指定 。
有效载荷: MQTT 数据包中存储信件特定数据的组件 。
固定头格式:
固定页眉的第一个字节是4位位元,指定数据包类型,而 MQTT 软件包包括以下类型:
页眉中的底部 4 位位用于指定一个数据包、多种数据集以及每个数据包的不同定义。
旗子看起来是这样的:
从固定页眉的第二个字节开始,用字段来表示MQTT数据包的长度,最少一个字节,最多四个字节,每个字节是独一无二的。
低7比特用于识别值,识别值可能介于0至127之间。 顶部位为标记槽,用于表示是否有成功字节标记长度。
该代表其后没有0号身份识别字节;1号身份识别字节中,该代表其后有1号身份识别套件长度的字节。
为确定软件包的长度,请使用四个字节。
因此,这四个字节加起来等于(0xFF, 0xFF, 0xFF, 0x7F) = 268, 35455字节,或大约256M。
MQTT 协议中的最大数据包长度 。
下图描述客户端与经纪人的连接程序:
该链接由客户端建立,客户端首先向经纪人发送了CONECT数据包,其中载有CONECT数据包。
我要说的是:
CONNECT数据包变量页眉包含以下信息。
协议名称(议定书名称):价值定为 " MQTT " 。
例如,MQTT3.一.1协议版本的价值为4。
用户名 ID (用户名旗号): 信件正文中是否有用户名区域, 1bit, 0 或 1?
密码旗帜 : 信件正文中是否有密码字段, 1bit, 0 或 1?
这是 1 位、 0 位或 1 位保留信件吗?
QOS 最后一封邮件识别码(将 QOS): QOS, 2比特, 0, 1 或 2
旗帜:确定是否使用注1, 1bit, 0, 或 1
Clit的清洁会话: Clit是否在设计一个可持续的会话,1bit,0 或者 1,当清洁会话标识设为 0 时Clit代表希望建立与永久届会的联系。Clit的主题和未被接受的信息 将被经纪人保存。否则,Broker就不会保存数据。并删除上一届会议记录的数据,即连接建立时客户以前拥有的数据。
维持生命:将一个单位的时间间隔设为第二个单位。在这段时间内,客户与经纪人之间至少需要有一个相互联系。否则,客户和经纪人就会认为他们不再有联系。
“CONECT”数据包的信息主体包含以下信息。
客户识别:客户识别字段用于识别Clit。在MQTT 3. 1上,第一版。此字段的长度介于1至23字节之间。它只能包括数字和26个字母(包括案件)。经纪人利用此字段区分不同的客户。所以在连接的时候,客户应确保它是唯一的识别者。例如,我们通常使用UUID。设备唯一的硬件识别码例如,Android智能手机的DEVICE_ID。 作为Clit标识值的发端人
在连接时,MQTT协议需要客户提供客户身份确认,但它也使经纪人在发现客户身份时能够带来客户身份识别符。
如果此字段为空白, Broker 会指定客户端唯一的内部标识符。 如果您想要使用可持续会话, 您必须为客户端自己创建一个单一的标识符 。
如果变量页眉中的用户名设为一个,因此,信息将包括用户名称的部分内容。经纪人可以使用用户名和密码来验证客户的访问权限。只有经核准的客户才能进入。切记每个客户都有独特的客户身份。但是,它们可以使用相同的用户名和密码连接起来。
密码: 如果变量信头中的密码识别设为 1, 密码字段将包含在信件正文中 。
主题 : 如果变量的愿望设为 1, 信息将包括愿望主题, 如果客户意外断开连接, Broker 将向选定的愿望主题发送愿望信息 。
将消息 : 如果变量的愿望设为 1, 信息将包含意愿信息, 当 Clitt 意外地断开连接时, Broker 将在选定的愿望主题上公布字段定义的内容 。
当经纪人收到客户的CONNECT数据包时,在客户的CONNECK数据包返回之前,对内容进行审查和确认。
CONNACK 数据包包含以我要说的是:
CONNACK 数据包的变量页眉包含以下信息。
本届会议(现旗会议)的确定如下:关于经纪人、1比特、0或1的长期会议,客户(由Clit 识别符确定)存在。
当客户在连接中设置 CleanSesson=1 时, 位于CONNANK 的会话私旗总是设为 0 ;
当客户端设定 Clean Sesson=0 连接时, 发生两件事之一 :
如果Broker保留客户退出的持续会话,CONNANK的会话私旗价值定在1。
如果经纪人不为客户保存任何会话数据,则CONNANK会话的私人旗号值为0。
会议包含的旗帜功能在MQTT 3.Ione.1中是新的,没有出现在以前的版本中。
以下数值用于确定Clit是否与Broker建立了联系:
在 MQTT 协议下, 返回代码 4 表示用户名和密码格式不正确 。然而,在大部分布洛克的认知中,当您使用错误的用户名和密码时,获得返回代码也是4个。因此,假定4是错误的用户名或密码。
当经纪人使用IP地址而不是用户名和密码或客户身份时,返回代码5经常被用来在未经认证的情况下识别客户。
返回代码2反映不受管制的Clit识别表,例如,超过23个字符且没有授权字符的识别表。
(作为经纪人实现工作的一部分,包括协议标准,例如允许有23个以上字符的Clit识别符。 )
Connack无法提供消息来源。
当客户向经纪人提供CONNECT数据包并收到带有0号返回代码的CONNACK数据包时,它表示连接成功,信息可以发布和接收。
客户端通过向Broker发送 DISCOONNECT 数据包, 主动终止连接 。
DISCONEC数据包没有可变头(可变头)或信件正文( payload) 。
您可以在不连接后关闭底部 TCP 连接, 而不等待 Broker 的回答 。
破坏数据包反应
为何必须在关闭 TCP 连接而不是关闭底部 TCP 连接之前传输一个不与Broker 互动的DisconnECT 数据包? 为何有必要直接传输一个在关闭 TCP 连接而不是直接关闭底部 TCP 连接之前不与Broker 互动的DisconnECT 数据包?
这涉及MQTT协议的特点,Broker需要评估Clit是否普遍断绝了联系:
Clit的DisconnECT数据包交给了Broker它认为Clit是经常断开的Will Message, 为当前连接定义的最后信息, 将会被丢弃 。如果经纪人发现客户失去联系但又没有收到
DISONNECT电文包认为Clit是异常断开,将针对连接时显示的最后的愿望主题(Will)。
Will Message 将最后一分钟的信息发送到 Topic 。
根据MQTT协议,经纪人必须保持客户联系,直到他收到客户的DisconnECT数据包为止。只有Broker在"保持生命"状态如果没有客户端提供 MQTT 数据包, 连接将终止 。一些经纪公司的认识导致了一些MQTT协议的推广。客户连接管理得到支持。与特定客户端的连接可自行取消 。在积极结束连接前,经纪人不向客户发送任何 MQTT 数据包。我们只需要在最低水平关掉TCP 我们就完了
js MQTT 的 MQTT 库, 确保节点被安装. js, 与 npm 安装 mqtt- save 安装
MQTT 库。
校对:Soup
我不知道你在说什么 但我不知道你在说什么 我不知道你在说什么 但我不知道你在说什么 我不知道你在说什么 但我不知道你在说什么
终端上运行:
您可以将清洁选项设置为真实, 从而创建一个非持续会话连接 。
基于信息模式的MQT用户和出版商、基于主题(Topic)的MQT协议用户和出版商以及典型的MQTT信息发送和接收操作如下:
ClieentB如果在ClieentA发布后订阅Topic1, 就不会收到讯息了。
MQTT利用订阅和分发计划,将信息出版商和订阅者分开。在信息发布时,不要求出版商将订阅者与Broker连接起来。只要订阅者已经订阅同一主题,通过与Broker的连接,它就可以在发行期间收到出版商发来的信息。为了方便起见,这称为离线信息。
接收离线电文需要使用持久性会话和发布时大于1的QOS。
主题识别资料包括出版商和订户。如果客户向“专题”发送信息,“专题”接收信息。因此,这是出版商的过错;如果客户订阅《专题》,然后是订阅。在上面的例子中,ClientA 是
出版商ClieentB是订阅者。
发件人和接收人的身份与电文传递方向有关,并继续用作例子:
当ClieentA发出信息时,它会把它传送给Broker, 所以ClieentA是发件人,Broker是收件人。
当Broker向客户端B发送信息时,Broker是发送者,Lusber是接收者。
这两个概念之间最重要的区别是出版商/订户、发件人/收件人和其他两个概念。只有客户可能是出版商或订户。因此,发件人/收件人既可以是客户,也可以是经纪人。
当出版商前往某个地点时,PUBLISH数据集被用于在发件人和收件人之间传递信息。
当主题发出一个信息,出版商将向Broker提供PUBLISH数据包;当Broker希望向订阅主题的下标人传递信息时,他可以将其作为工具使用。经纪人还将向订户发送一个PUBLISH数据包。PUBLISH数据包看起来是这样的。
重复的信件标识( DUUP 标记) : 1bit, 0bit 或 1bit, 当 DUP 标记 = 1 表示重复消息时, 重复信件识别( DUUP 标记) : 1bit, 0bit 或 1bit, 因为
收件人没有确认收到前一条电文, 也没有予以痛恨。 在 QoS 中, 此标识符只用于超过 0 的电文 。
QOS: PUBLISH 消息的 QOS 级别为 2比特、 0 或 1 。
标记保留: 1 位0 或者 1,当客户向Broker发送的PUBLISH信息数量设定为一时,该通信应由经纪人保管。此后,如果任何新的订户赞同PUBLISH信息中提供的主题,这是他们第一次听说这起事件当Broker给客户端的 PUBLISH 信息设定为 1 时, 此信息也被称为“ 留存 ” 。这是代表本条保存的信息。
2 位元套件标识符( 包识别符)它用来识别特定的数据包。数据包只需指定,以确保从发件人到收件人的交互式通信(例如发送、答复交互通信)具有独特性。仅在信件数大于一的 QoS 信件中使用。因为只有价值大于一个的 QoS 信息才有响应程序 。
主题名称( 主题名称) 是 UTF-8 编码的字符串 。这篇文章是全球之声在线特稿的一部分。任何字符串的长度大于或等于大于或等于一个字符串(可能包括空格)可用作主题名称。但是在实际项目中,最好采用下文概述的一些最佳方法。
专题名称应有一个等级,采用多层/分层,例如,二楼201室的温度传感器可用于该主控器。
"20世纪20/29/温度的家,"你问。
例如"/home/2ndbroor/201/温度"。
在主题中, 不允许有空格 。
仅使用 ASCII 字符 。
专题名称应尽可能简短和易懂。
主题很敏感,“家”和“家”不是一回事。
该设备的唯一标记可以附在专题之后,例如“仓库/仓库/仓库/仓库1_ID/status”。
主题尽量精确,不要用泛泛的话题。例如,201室有三个传感器。温度、亮度和湿度,因此,你应该使用三个主题名称:“home/ndloor/201/温度”、“home/ndloor/201/brightness”和“home/ndloor/201/人性”。所有三个传感器使用“home/ndloor/201”代替“home/ndloor/201”,
以$开头的主题是由Broker保留的一个系统主题,通常用于分发例如Broker的内部统计数据。
为接受和提供数据,本方案不使用美元起始主题。
PUBLISH电文的来源提供了该电文意在传输的确切数据。资料可能采用任何格式。这是该国历史上第一次能够从二元来源、文本、JSON和其他格式获得数据。由应用程序来定义。在实际生产中,我们可以使用JSON、协议缓冲和其他方法来编码数据。
当接收者收到发件人发来的PUBLISH信息时,将启动基于 QOS 的后续回复程序。
当 PUBLISH 消息的 QOS 设置为 0 时, 收件人不会反应 。
本文由 在线网速测试 整理编辑,转载请注明出处。