MQTT建立连接CONNECT分析

本文详细分析了MQTT协议中建立连接的CONNECT报文,包括帧结构、固定报头、可变报头和有效载荷的内容,特别讨论了协议名、协议级别、连接标志和客户端标识符等关键信息。
摘要由CSDN通过智能技术生成
CONNECT — 连接服务器

整个帧结构

(0000)     00 0c 29 8d b5 bd 00 50 56 c0 00 08 08 00 45 00
(0010)     00 4e 69 ca 40 00 40 06 2b 00 c0 a8 92 01 c0 a8
(0020)     92 8d cd 86 07 5b fa e8 93 77 82 4b 86 84 50 18
(0030)     01 00 b1 44 00 00 10 24 00 06 4d 51 49 73 64 70
(0040)     03 02 00 3c 00 16 6d 6f 73 71 73 75 62 2f 31 31
(0050)     32 31 36 2d 50 6f 74 6f 59 61 6e 67
 
注:加粗部分为MQTT协议结构

分析说明

固定报头:
    协议类型+保留位:10,其中MQTT报文控制类型为1,保留位为0,1代表类型1,即CONNECT请求.
    剩余长度: 24(36),代表可变报头长度(10字节)加上有效载荷长度一共为36字节.

可变报头:
    协议名长度:00 06,代表协议名长度为6字节
    协议名:4d 51 49 73 64 70 ,协议名称为:MQIsdp

为什么不是MQTT?
解析:这是在MQTT3.1标准中的定义,在MQTT3.1.1标准中,MQIsdp被改为了MQTT, 见 MQTT3.1与MQTT3.1.1版的区别

    协议级别:03,对应于MQTT3.1版本
    连接标志:02,说明
image
    保持连接:00 3c (60),以秒为单位,代表客户端传输完成一个控制报文的时刻到下一个报文的时刻,两者之间允许空闲的最大时间间隔。

有效载荷:
    可变报头中的标志决定是否包含这些字段,如果包含的话,必须按照这个顺序出现:客户端标识符,遗嘱主题,遗嘱消息,用户名,密码,客户端标识符必须存在而且必须是CONNECT报文有效载荷的第一个字段
    客户端标识符长度:00 16,代表接下来的客户端标识符长度为22字节。
    客户端标识符:6d 6f 73 71 73 75 62 2f 31 31 32 31 36 2d 50 6f 74 6f 59 61 6e 67(mosqsub/11216-PotoYang)

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,适用于各种物联网和机器到机器通信场景。要使用JavaScript建立MQTT连接,可以使用MQTT.js库。 首先,我们需要安装MQTT.js库。可以使用npm(Node Package Manager)命令行工具在命令行中执行以下命令来进行安装: ``` npm install mqtt --save ``` 然后,在JavaScript代码中导入MQTT.js库: ```javascript const mqtt = require('mqtt'); ``` 接下来,我们可以使用mqtt.connect方法建立MQTT代理服务器的连接。您需要提供代理服务器的URL,格式如下: ```javascript const client = mqtt.connect('mqtt://<mqtt_server>:<port>'); ``` 其中,`mqtt_server`是MQTT代理服务器的地址,`port`是MQTT代理服务器的端口号。 连接建立后,我们可以使用client.on方法来监听各种MQTT事件,比如连接成功、连接断开等。以下是一个示例: ```javascript client.on('connect', function() { console.log('连接成功'); }); client.on('close', function() { console.log('连接已关闭'); }); client.on('message', function(topic, message) { console.log('收到消息:' + message.toString()); }); // 订阅一个主题 client.subscribe('topic1'); ``` 在上述示例中,我们通过client.on方法分别监听了连接成功、连接关闭和收到消息等事件,并在事件触发时执行相应的回调函数。 最后,我们可以使用client.publish方法来发布消息。以下是一个示例: ```javascript client.publish('topic1', 'Hello MQTT'); ``` 以上就是使用JavaScript建立MQTT连接的简要步骤。通过MQTT.js库,我们可以轻松地实现与MQTT代理服务器的通信,从而在物联网和机器到机器通信中发挥作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值