首页 > 编程知识 正文

python redis连接池,qpython

时间:2023-05-05 03:00:28 阅读:44096 作者:2679

写在前面

在此期间,系统通过摆弄IoT相关的东西学习了MQTT协议,在此共享。

本文首先对MQTT协议进行了简要介绍; 其次对MQTT协议的内容进行了较全面的解读; 最后,使用Python语言实现简单的MQTT客户端和服务器。

个人资料

MQTT的全名是消息队列遥测传输,翻译成中文意味着“遥测传输协议”。 这是IBM最初提出的TCP协议,具有简单、轻量等优点,特别适用于在有限的环境(低带宽、高网络延迟、不稳定的网络通信)中传递消息。 MQTT协议有3.x、5.x等多个版本,目前最常用的版本是v3.1.1,本文也是对该版本协议的解读。 MQTT协议内置于ISO标准(ISO/IEC PRF 20922 )中,受当前主流IoT平台的支持。

快速启动

MQTT是发布-订阅协议,这意味着:

客户端(客户端)可以向服务端(中介)订阅自己感兴趣的主题(Topic )

客户端还可以向服务器发布(Publish )有关某个主题的信息。 (不需要预先创建主题,只要在发布消息时指定即可。)。

当服务器收到客户端发布的消息时,它会将该消息转发给订阅主题的其他客户端。

我们可以在自己的电脑上运行MQTT的服务端和多个MQTT的客户端来体验这个过程。

MQTT服务端有很多选择。 这里使用Mosquitto按照其官方文档的说明进行安装即可,但这里不太介绍。

Mac用户可以通过以下命令安装和启动Mosquitto :

brew install mosquitto

brew services start mosquitto

Mosquitto提供了命令行工具mosquitto_sub和mosquitto_pub,您可以在服务端订阅主题和发布消息。

在命令行窗口中,运行以下命令订阅主题" foo " :

mosquitto _ su B- h 127.0.0.1-p 1883-tfoo-Q2

在单独的命令行窗口中,通过运行以下命令向foo主题发出消息“Hello,MQTT”:

mosquitto _ pu B- h 127.0.0.1-p 1883-tfoo-Q2-m ' hello,MQTT '

最终,您会看到第一个命令行窗口中打印了消息“Hello,MQTT”。 也就是说,第一个客户端是主题“foo”,它从第二个客户端接收到消息。

协商的详细情况

数据包总体格式

从总体上看,数据包分为三个部分。 一个是固定标头,它一定存在。 另一个是可变头部,它不一定存在; 剩下的一个是载荷,那个也不一定存在。 数据以大序方式保存。

-------------请参阅

| |

|固定头部(必填) |

| |

-------------请参阅

| |

|可变头部(非必需) |

| |

-------------请参阅

| |

|载荷(非必需) |

| |

-------------请参阅

固定头部(固定头部) ) ) )。

固定头格式如下:

------------- -请参阅

|位|7|6|5|4|3|2|1|0|

------------- -请参阅

byte 1分组类型

------------- -请参阅

| byte2.| Remaining Length |

------------- -请参阅

封装类型(Packet type ) )

名字

流向导向

描述

保留的

0

福里比德登

保留的

连接

1

客户端到服务器

客户端请求到连接到服务器

CONNACK

2

Server to Client

Connect acknowledgment

PUBLISH

3

Client to Server or Server to Client

Publish message

PUBACK

4

Client to Server or Server to Client

Publish acknowledgment

PUBREC

5

Client to Server or Server to Client

Publish received (assured delivery part 1)

PUBREL

6

Client to Server or Server to Client

Publish release (assured delivery part 2)

PUBCOMP

7

Client to Server or Server to Client

Publish complete (assured delivery part 3)

SUBSCRIBE

8

Client to Server

Client subscribe request

SUBACK

9

Server to Client

Subscribe acknowledgment

UNSUBSCRIBE

10

Client to Server

Unsubscribe request

UNSUBACK

11

Server to Client

Unsubscribe acknowledgment

PINGREQ

12

Client to Server

PING request

PINGRESP

13

Server to Client

PING response

DISCONNECT

14

Client to Server

Client is disconnecting

Reserved

15

Forbidden

Reserved

标记(Flags)

不同包类型标记位含义不尽相同,具体情况如下表所示:

Control Packet

Fixed header flags

Bit 3

Bit 2

Bit 1

Bit 0

CONNECT

Reserved

0

0

0

0

CONNACK

Reserved

0

0

0

0

PUBLISH

Used in MQTT 3.1.1

DUP1

QoS2

QoS2

RETAIN3

PUBACK

Reserved

0

0

0

0

PUBREC

Reserved

0

0

0

0

PUBREL

Reserved

0

0

1

0

PUBCOMP

Reserved

0

0

0

0

SUBSCRIBE

Reserved

0

0

1

0

SUBACK

Reserved

0

0

0

0

UNSUBSCRIBE

Reserved

0

0

1

0

UNSUBACK

Reserved

0

0

0

0

PINGREQ

Reserved

0

0

0

0

PINGRESP

Reserved

0

0

0

0

DISCONNECT

Reserved

0

0

0

0

剩余长度(Remaining Length)

Remaining Length 表示的是本数据包剩余部分的字节数,即可变头部和载荷的字节数之和。为了节省传输时的字节数,Remaining Length 采用的是一种变长编码方式。这就是说 Remaining Length 字段的字节数不是固定的,它可能使用1~4个字节。既然 Remaining Length 的字节数是可变的,那么问题来了,我们在解码包数据的时候,怎么知道 Remaining Length 究竟是使用几个字节编码的呢?解决这个问题的办法是,将每个字节的最高位(MSB)作为标志位。若该位的值是1,则意味着下一个字节属于参与 Remaining Length 编码的字节;若该位的值是0,则意味着本字节已经是最后一个参与 Remaining Length 编码的字节了。

举几个

分类:

技术点:

By © 2017 likecs 版权所有.

粤ICP备12038626号-2

Powered By WordPress . Theme by Luju

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。