ob欧宝体育网址

  • shi间 :2021-06-04
  • 作者 :ag亚洲游戏集团官网网址科技
  • 浏览数 :1339

本文介shaoMQTT的连接(CONNECT)、心tiao(PINGREQ/PINGRESP)、确认(CONNACK)、断开连接(DISCONNECT)四部分内容。


CONNECT

MQTT v3.1.1you关字fu串部分采用的修改版的UTF-8编码,CONNECT可变头部中协yi名称、消xi体都是采用修改版的UTF-8编码。下面是一个较为完整的CONNECT消xi结gou:


mqtt connect消xi结gou.jpg


协yi变hua

在MQTT 3.1.1中:

1、CONNECT消xi可变头部协yi名称MQIsdpbei改为MQTT。

2、所you字fu串明确规定使用UTF-8编码,baokuo客户端标识fu(Client Identifier)。

3、针对客户端标识fu( client identifier)xian制you原来的23个字节上xian改为65535个字节。

4、CONNECT消xi可变头部协yi版本号,you0x03变chengliao0x04 QoS 0类型PUBLISH消xiDUP标记bi须bei设置为0

5、MQTT Over WebSocket bei定义,互联网地址编码分配机gou(Internet Assigned Numbers Authority)分配标识fu为mqtt。虽在MQTT 3.1规范通篇没you提daoWebSocket,但因其二进制shuxing可以hen容yi的在WebSocket通道传输。


术yu变hua

●  MQTT代理(MQTT Broker) -> MQTT服务器(MQTT Server)

●  消xiID(Message ID) -> baoID(Packet ID)

●  消xi类型(Message Type) -> bao类型(Packet Type)

●  zhu题lu径(Topic Paths) -> zhu题名称(Topic names

●  以前在gu定头部,现在在bao类型中

●  0字节保留xinxi需要清除


可变头部

协yi名称和协yi版本都是gu定的。


连接标zhi(Connect Flags)

一个字节biao示,除liao第1wei是保留未使用,其它7wei都juyou不同含义。ye务上hen重要,对消xizong体流程影响hen大,需要牢记。


Clean Session

0,biao示如果订阅的客户机断线liao,要保cun为其要推送的消xi(QoS为1和QoS为2),若其重新连接shi,需将这些消xi推送(若客户端长shi间不连接,需要设置一个guo期值)。

1,断线服务器即清理相关xinxi,重新连統ou侠磟hihou,会再次订阅。


Will Flag

定义liao客户端(没youzhudong发送DISCONNECT消xi)出现网络yi常导zhi连接中断祅a閗uang下,服务器需要做的一些措施。

  简er言zhi,就是客户端预先定义好,在自己yi常断开祅a閗uang下,所留下的最hou遗愿(Last Will),也称zhi为遗嘱(Testament)。 这个遗嘱就是一个you客户端预先定义好的zhu题和对ying消xi,fu加在CONNECT的可变头部中,在客户端连接出现yi常祅a閗uang下,you服务器zhudong发布ci消xi。

  只觴ing赪ill Flagwei为1shi,Will Qos和Will Retain才会bei读取,cishi消xi体payload中要出现Will Topic和Will Messageju体内容,否则,Will QoS和Will Retain值会bei忽lue掉。


Will Qos

两weibiao示,和PUBLISH消xigu定头部的QoS level含义一样。这里先lueguo,daoPUBLISH消xi再回guo蚮ang磌ankan,会geng明白些。若标识liaoWill Flag值为1,na么Will QoS就会sheng效,否则会bei忽lue掉。


Will Retain

如果设置Will Flag,Will Retain标zhi就是you效的,否则它将bei忽lue。dang客户端意外断开服务器发布其Will Messagezhihou,服务器是否ying该继xu保cun。这个shuxing和PUBLISHgu定头部的RETAIN标zhi含义一样,这里先lueguo。


User name 和 password Flag

用于授权,两者要么为0要么为1,否则都是无效。都为0,biao示客户端可自you连接/订阅,都为1,biao示连接/订阅需要授权。


Payload/消xi体

消xi体定义的消xi顺序(如上biao所示),约定俗cheng,不得geng改,否则将可能引起hun乱。

  若Will Flag值为0,na么在payload中,Client Identiferhou面就不会cun在Will Topic和Will Message内容。

  若User Name和Password都为0,意味zhouPayload/消xi体中,找不daoUser Name和password的值,就算you,也是无效。标zhi决定zhou是否读取与否。


心tiaoshi间(Keep Alive timer)

以miao为单wei,定义服务器端从客户端接蕑hang鹸i的最大shi间间隔。一般ying用服务会在ye务层次检测客户端网络是否连接,不是TCP/IP协yi层面的心tiao机制(比如开启SOCKET的SO_KEEPALIVE选项)。 一般来讲,在一个心tiao间隔内,客户端发送一个PINGREQ消xidao服务器,服务器返回PINGRESP消xi,完cheng一次心tiaojiao互,继er等待下一轮。若客户端没you收dao心tiaofan馈,会关bi掉TCP/IP端口连接,离线。 16wei两个字节,可kan做一个无fu号的short类型值。最大值,2^16-1 = 65535miao = 18小shi。最小值可以为0,biao示客户端不断开。一般设为ji分钟,比如微xin心tiao周期为300miao。


Will Message编码

Will Message在CONNECT Payload/xi体中,使用UTF-8编码。jia设内容为“abcd”,大概如下:


mqtt connect will message.jpg

注:PUBLISH的Payload/消xi体中以二进制编码保cun


在某一shi间dian客户端yi常关bi会chu发服务器PUBLISHci消xi。na么服务器会直接把byte3-byte6zhi间字fu取出,保cun为二进制,fu加daoPUBLISH消xi体中,大概cunchu如下:


mqtt publish will message.jpg


连接yi常中断通知机制

CONNECT消xi一旦设置在可变头部设置liaoWill flag标记,na就启用liaoLast-Will-And-Testament特xing,ci特xinghenzan。

  一旦客户端出现yi常中断,便会chu发服务器发布Will Message消xidaoWill Topiczhu题上qu,通知Will Topic订阅者,对方因yi常退出。



CONNACK

收daoCONNECT消xizhihou,服务器ying该返回一个CONNACK消xi作为响ying:


若客户端绕guoCONNECT消xi直接发送其它类型消xi,服务器ying关bici非fa连接 若客户端发送CONNECTzhihou未收daoCONNACT,需要关bidang前连接,然hou重新连接


相同Client ID客户端已连接dao服务器,先前客户端bi须断开连接hou,服务器才能完cheng新的客户端CONNECT连接 客户端发送无效非faCONNECT消xi,服务器需要关bi。


  一个完整的CONNACK消xi大zhi如下:


connack.jpg


  可变头部第一个字节为保留,无甚用处。第二个字节为连接握手返回码:


connack response code.jpg


  只you0-5目前bei使用dao,其ta值you待日hou使用。一般返回值为0x00,biao示连接建立。非fa祅a肭螅?枰?祷叵鄖ing的数值。


  磞ou厦鎘an出,一个CONNACK,四个字节biao示。一个正常的CONNACK消xi实际内容可能如下:


0x20 0x02 0x00 0x00 

  

若是在私you协yi中,两个字节就zu够liao。hen多shi候,客户端和服务器端在没you消xi传dishi,会一直保chizhou连接。虽然不能依靠TCP心tiao机制(比如SO_KEEPALIVE选项),ye务层面定义心tiao机制,会让连接状态检测、控制geng为直guan。



PINGREQ

you客户端发送dao服务器端,证明自己还在一直连接zhou呢。两个字节,gu定值。


PINGREQ.jpg


  客户端会在一个心tiao周期内发送一条PINGREQ消xidao服务器端。心tiaopin率在CONNECT可变头部“Keep Alive Timer”中定义shi间,单wei为miao,无fu号16weishortbiao示。



PINGRESP

服务器收daoPINGREQ请求zhihou,会立即响ying一个两个字节gu定格式的PINGRESP消xi。


PINGRESP.jpg


  服务器一般若在1.5倍的心tiao周期内接收不dao客户端发送的PINGREQ,可考虑关bi客户端的连接miao述fu。cishi的关bi连接的行为和接收dao客户端发送DISCONNECT消xi的处理行为一zhi,但对客户端的订阅不会产sheng影响(不会清除客户端订阅数据),这个需要牢记。


  若客户端发送PINGREQzhihou的一个心tiao周期内接收不daoPINGRESP消xi,可考虑关biTCP/IP套接字连接。



DISCONNECT

客户端zhudong发送dao服务器端,biao明即将关biTCP/IP连接。cishi要求服务器要完整、ganjing的进行断开处理,不能仅仅类似于关bi连接miao述fu类似草草处理zhi。 需要两个字节,值gu定。


DISCONNECT.jpg


  服务器要根据先前ci客户端在发送CONNECT消xi可变头部Connect flag中的“Clean session flag”所设置值。复习一下:


值为0,服务器bi须在客户端断开zhihou继xucunchu/保chi客户端的订阅状态。这些状态baokuo:

●  cunchu订阅的消xiQoS1和QoS2消xi

●  正在发送消xi期间连接丢shi导zhi发送shi败的消xi。

●  以便dang客户端重新连接shi以上消xi可以bei重新传di。

●  值为1,服务器需要立刻清理连接状态数据。


注意:服务器在接收dao客户端发送的DISCONNECT消xizhihou,需要zhudong关biTCP/IP连接。


联系我们
联系我们

ag亚洲游戏集团官网网址Baimatech,集M2M产品研发、IoT平台服务、国际hua运营于一体,让我们联接,gong创未来