(十二)、MQTT3.1.1-MQTT客户端数据结构设计

为进一步实现一个简易的MQTT客户端,做如下客户端数据结构设计。

1、客户端协议相关的函数

连接

tx_connect()

发送连接请求

手动触发

rx_connectack()

接收到服务端回应的连接响应

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据client查找connect。

发布,Qos=0

tx_publish(Qos=0)

手动触发

发布,Qos=1

tx_publish(Qos=1)

手动触发

rx_puback()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据m_uuid查找message。

发布,Qos=2

tx_publish(Qos=2)

手动触发

rx_pubrec()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据m_uuid查找message。

tx_pubrel()

根据pubrec触发

rx_pubcomp()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据m_uuid查找message。

订阅

tx_subscribe()

手动触发

rx_suback()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据s_uuid查找subscribe。

取消订阅

tx_unsubscribe()

手动触发

rx_unsuback()

Socket中监听,通过第一个字节switch,根据TCP/IP查找client,根据s_uuid查找subscribe。

心跳

tx_pingreq()

自动定时触发

rx_pingresp()

断开连接

tx_disconnect

手动触发

2、客户端数据结构

列表Clients{

  Connect;

  TCP/IP;

  Messages;

Subscribes;

Next_client;}

Client对象列表,clinet属性有连接、TCP/IP、未处理完成的消息、未处理完成的订阅,指向下一个clinet的指针。

Connect{

  Protocolname;

  protocolLevel;

  Connectflage;

  Keepalive;

  Clientid;

  Willtopic;

  Willmessage;

  Username;

  Password

connectflage;}

其中:

Connectflage{

Bit Usernameflag;

Bit Passwordflag;

Bit Willretain;

Bit Willqos;

Bit Willflag;

Bit Cleansession;

Bit Reserved;

}

每个client对象都有一个连接结构体,用该参数来与MQTT服务器建立连铸。

TCP/IP{

 IPaddr;

 Port;

 Pingtime;}

Client对象使用的传输物理实现。

列表Messages{

Dup;

Qos;

Retain;

M_uuid;

Messagedata;

Messageflag;

Next_message;}

其中:

Messageflag;

Qos=0:

0->pub;

Qos=1:

0->pub,1->ack

Qos=2:

0->pub,1->ack,2->rel,3->comp

Client对象未处理完成的消息。

列表Subscribes{

Topicfilter;

S_uuid;

Subscribeflag;

Next_subscribe;}

其中:

Subscribeflag;

 0->tx,1->ack

Client对象的订阅。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传递协议,用于不同设备之间的通信。MQTT 3.1.1是MQTT的版本号,是比较常用的版本。 MQTT 3.1.1协议具有以下特点和优势: 1. 轻量级:MQTT采用一种非常轻巧的封装格式,使得它非常适合在网络带宽较低或者资源受限的环境下使用,如物联网设备中。 2. 简单易用:MQTT协议的设计非常简单,只有3个主要角色:发布者(Publisher)、订阅者(Subscriber)和代理服务器(Broker)。这种简单的架构使得开发者可以轻松地实现MQTT通信。 3. 异步通信:MQTT允许发布者和订阅者之间进行异步通信。发布者只需要将消息发布到代理服务器上,订阅者则可以在需要的时候订阅到消息。这种异步通信的特性可以提高通信的效率和可扩展性。 4. 可靠性:MQTT 3.1.1协议提供了多种传输层的质量保证服务,如最多一次、至少一次和只有一次的传输保证。根据应用场景的不同,可以选择适当的服务质量。 5. 安全性:MQTT 3.1.1协议支持SSL/TLS加密和鉴权机制,确保通信的安全性。通过这些安全机制,可以对消息进行加密传输,同时也可以对客户进行身份验证。 总而言之,MQTT 3.1.1协议是一种适用于物联网设备的轻量级、简单易用、可靠和安全的通信协议。它的设计目标是在网络带宽有限和资源受限的条件下,实现可靠的异步通信。在物联网领域,MQTT 3.1.1广泛应用于各种场景,如传感器数据的采集、智能家居的控制等。 ### 回答2: MQTT 3.1.1协议是一种轻量级的通信协议,主要用于物联网和小型设备之间的通信。 MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅的模式的消息协议,具有低带宽、低数据包开销和低延迟的特点。它使用TCP/IP协议进行通信,并支持多种可靠性的服务质量等级。 MQTT 3.1.1协议定义了客户与服务器之间的消息传输格式和规则。客户可以是任何设备或应用程序,服务器则负责接收、转发和传送消息。 MQTT 3.1.1协议使用发布/订阅模式进行通信。客户可以发布消息到特定的主题(topic),而其他客户可以通过订阅相应的主题来接收消息。通过定义主题层次结构,可以实现灵活的消息过滤和分发。 协议中还定义了三个服务质量等级(QoS):0级为“至多一次”,消息会至少传输一次,但可能会重复或丢失;1级为“至少一次”,消息会至少传输一次,但可以重复;2级为“恰好一次”,消息会确保只传输一次。 此外,MQTT 3.1.1协议还支持保留消息和遗嘱消息的功能。保留消息是指发布到特定主题的消息会被保留在服务器上,新的订阅者可以接收到最新的保留消息。而遗嘱消息是当客户断开连接时,服务器会代替客户发布一个预先定义的消息,用于通知其他订阅者。 总的来说,MQTT 3.1.1协议提供了一种高效、灵活和可靠的通信机制,特别适用于物联网场景。它的低带宽和低功耗特性使其成为物联网设备之间通信的理想选择。 ### 回答3: MQTT(Message Queuing Telemetry Transport)是一种轻量级发布/订阅协议,用于在物联网设备之间传输消息。MQTT 3.1.1是MQTT协议的一个版本。 MQTT 3.1.1协议增强了先前版本的功能和性能。它主要包含以下几个方面的改进: 1. 会话状态:MQTT 3.1.1引入了会话状态的概念,使得设备可以保存和恢复连接状态。这意味着设备断开连接后,可以通过恢复会话状态来继续传输消息。 2. 心跳机制:MQTT 3.1.1中添加了心跳机制,用于检测设备是否在线。通过在连接期间定期发送心跳包,可以及时检测设备的连接状态。如果设备长时间未发送心跳包,服务器就可以判断设备已经离线,并采取相应的措施。 3. 遗愿消息:MQTT 3.1.1允许设备在断开连接时发送遗愿消息。遗愿消息是设备事先配置好的消息,当设备异常断开连接时,服务器会自动发布这些消息给其他订阅者。 4. 主题过滤器:MQTT 3.1.1支持更灵活的主题过滤器,可以通过通配符匹配多个主题。这使得订阅者可以更方便地订阅特定类型的消息。 5. 安全性:MQTT 3.1.1支持SSL/TLS加密传输,保护消息的安全性。设备和服务器可以使用用户名和密码进行身份验证,确保只有授权的设备才能连接和发布消息。 总的来说,MQTT 3.1.1协议在原有的基础上增加了一些重要的功能和改进,使得物联网设备之间的通信更加可靠和灵活。它被广泛应用于物联网领域,提供了一种高效、轻量级的消息传输解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值