代码改变世界

MOTT的学习(一)

2016-04-14 11:06  清风扬柳  阅读(400)  评论(0编辑  收藏  举报

MQTT的消息体

flag

此标志设置时,客户端或服务器尝试重新publish,PUBREL,subcribe或unsubscribe消息。这适用于消息,
其中的QoS的值大于零(0),并且需要确认。当DUP位被设置,所述其头部包含一个消息ID。

QoS

  • QoS=0:最多一次,有可能重复或丢失。
  • QoS=1:至少一次,有可能重复。
  • Client[Qos=1,DUP=0/重复次数/,MessageId=x] --->PUBLISH--> Server收到后,存储Message,发布,删除,向Client回发PUBACKClient收到PUBACK后,删除Message;如果未收到PUBACK,设置DUP++,重新发送,Server端重新发布,所以有可能重复发送消息。
  • QoS=2:只有一次,确保消息只到达一次(用于比较严格的计费系统)。

Message Type

CONECT

  • TCP连接建立完毕后,Client向Server发出一个Request。
  • 如果一段时间内接收不到Server的Response,则关闭socket,重新建立一个session连接
  • 如果一个ClientID已经与服务器连接,则持有同样ClientID的旧有连接必须由服务器关闭后,新建立才能建立。

CONNACK Server发出Response响应。

  • 0x00 Connection Accepted
  • 0x01 Connection Refused: unacceptable protocol version
  • 0x02 Connection Refused: identifier rejected
  • 0x03 Connection Refused: server unavailable
  • 0x04 Connection Refused: bad user name or password
  • 0x05 Connection Refused: not authorized

PUBLISH 发送消息

Client/Servier均可以进行PUBLISH。
publish message 应该包含一个TopicName(Subject/Channel),即订阅关键词