MQTT 协议入门:基础知识和快速教程

2023-11-05

本文是 MQTT 协议的入门指南,提供了实用的代码示例。物联网和 MQTT 的初学者可以通过本文掌握 MQTT 的基本概念,快速开启 MQTT 服务和应用的开发。

什么是 MQTT?

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。

为什么 MQTT 是适用于物联网的最佳协议?

MQTT 所具有的适用于物联网特定需求的特点和功能,使其成为物联网领域最佳的协议之一。它的主要特点包括:

  • 轻量级:物联网设备通常在处理能力、内存和能耗方面受到限制。MQTT 开销低、报文小的特点使其非常适合这些设备,因为它消耗更少的资源,即使在有限的能力下也能实现高效的通信。
  • 可靠:物联网网络常常面临高延迟或连接不稳定的情况。MQTT 支持多种 QoS 等级、会话感知和持久连接,即使在困难的条件下也能保证消息的可靠传递,使其非常适合物联网应用。
  • 安全通信:安全对于物联网网络至关重要,因为其经常涉及敏感数据的传输。为确保数据在传输过程中的机密性,MQTT 提供传输层安全(TLS)和安全套接层(SSL)加密功能。此外,MQTT 还通过用户名/密码凭证或客户端证书提供身份验证和授权机制,以保护网络及其资源的访问。
  • 双向通信:MQTT 的发布-订阅模式为设备之间提供了无缝的双向通信方式。客户端既可以向主题发布消息,也可以订阅接收特定主题上的消息,从而实现了物联网生态系统中的高效数据交换,而无需直接将设备耦合在一起。这种模式也简化了新设备的集成,同时保证了系统易于扩展。
  • 连续、有状态的会话:MQTT 提供了客户端与 Broker 之间保持有状态会话的能力,这使得系统即使在断开连接后也能记住订阅和未传递的消息。此外,客户端还可以在建立连接时指定一个保活间隔,这会促使 Broker 定期检查连接状态。如果连接中断,Broker 会储存未传递的消息(根据 QoS 级别确定),并在客户端重新连接时尝试传递它们。这个特性保证了通信的可靠性,降低了因间断性连接而导致数据丢失的风险。
  • 大规模物联网设备支持:物联网系统往往涉及大量设备,需要一种能够处理大规模部署的协议。MQTT 的轻量级特性、低带宽消耗和对资源的高效利用使其成为大规模物联网应用的理想选择。通过采用发布-订阅模式,MQTT 实现了发送者和接收者的解耦,从而有效地减少了网络流量和资源使用。此外,协议对不同 QoS 等级的支持使得消息传递可以根据需求进行定制,确保在各种场景下获得最佳的性能表现。
  • 语言支持:物联网系统包含使用各种编程语言开发的设备和应用。MQTT 具有广泛的语言支持,使其能够轻松与多个平台和技术进行集成,从而实现了物联网生态系统中的无缝通信和互操作性。您可以阅读我们的 MQTT 客户端编程系列文章,学习如何在 PHP、Node.js、Python、Golang、Node.js 等编程语言中使用 MQTT。

MQTT 的工作原理

要了解 MQTT 的工作原理,首先需要掌握以下几个概念:MQTT 客户端、MQTT Broker、发布-订阅模式、主题、QoS。

MQTT 客户端

任何运行 MQTT 客户端库的应用或设备都是 MQTT 客户端。例如,使用 MQTT 的即时通讯应用是客户端,使用 MQTT 上报数据的各种传感器是客户端,各种 MQTT 测试工具也是客户端。

MQTT Broker

MQTT Broker 是负责处理客户端请求的关键组件,包括建立连接、断开连接、订阅和取消订阅等操作,同时还负责消息的转发。一个高效强大的 MQTT Broker 能够轻松应对海量连接和百万级消息吞吐量,从而帮助物联网服务提供商专注于业务发展,快速构建可靠的 MQTT 应用。

发布-订阅模式

发布-订阅模式与客户端-服务器模式的不同之处在于,它将发送消息的客户端(发布者)和接收消息的客户端(订阅者)进行了解耦。发布者和订阅者之间无需建立直接连接,而是通过 MQTT Broker 来负责消息的路由和分发。

下图展示了 MQTT 发布/订阅过程。温度传感器作为客户端连接到 MQTT Broker,并通过发布操作将温度数据发布到一个特定主题(例如 Temperature)。MQTT Broker 接收到该消息后会负责将其转发给订阅了相应主题(Temperature)的订阅者客户端。

MQTT 发布-订阅模式

主题

MQTT 协议根据主题来转发消息。主题通过 / 来区分层级,类似于 URL 路径,例如:

chat/room/1

sensor/10/temperature

sensor/+/temperature

MQTT 主题支持以下两种通配符:+#

  • +:表示单层通配符,例如 a/+ 匹配 a/xa/y
  • #:表示多层通配符,例如 a/# 匹配 a/xa/b/c/d

注意:通配符主题只能用于订阅,不能用于发布。

QoS

MQTT 提供了三种服务质量(QoS),在不同网络环境下保证消息的可靠性。

  • QoS 0:消息最多传送一次。如果当前客户端不可用,它将丢失这条消息。
  • QoS 1:消息至少传送一次。
  • QoS 2:消息只传送一次。

MQTT 的工作流程

在了解了 MQTT 的基本组件之后,让我们来看看它的一般工作流程:

  1. 客户端使用 TCP/IP 协议与 Broker 建立连接,可以选择使用 TLS/SSL 加密来实现安全通信。客户端提供认证信息,并指定会话类型(Clean Session 或 Persistent Session)。
  2. 客户端既可以向特定主题发布消息,也可以订阅主题以接收消息。当客户端发布消息时,它会将消息发送给 MQTT Broker;而当客户端订阅消息时,它会接收与订阅主题相关的消息。
  3. MQTT Broker 接收发布的消息,并将这些消息转发给订阅了对应主题的客户端。它根据 QoS 等级确保消息可靠传递,并根据会话类型为断开连接的客户端存储消息。

开始使用 MQTT:快速教程

下面我们将通过一些简单的示例来展示如何使用 MQTT。在开始之前,需要准备 MQTT Broker 和 MQTT 客户端。

准备 MQTT Broker

您可以选择私有部署或完全托管的云服务来建立自己的 MQTT Broker。或者您也可以使用免费的公共 Broker。

  • 私有部署

    EMQX 是最具扩展性的开源 MQTT Broker,适用于物联网、工业物联网和车联网。您可以运行以下 Docker 命令来安装 EMQX。

    docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx
    
  • 全托管的云服务

    通过全托管的云服务启动 MQTT 服务是最便捷的方式。如下图所示,EMQX Cloud 可以在几分钟内启动,并在 AWS、Google Cloud 和 Microsoft Azure 的 17 个区域提供运行支持。

    EMQX MQTT Cloud

  • 免费的公共 MQTT Broker

    在本文中,我们将使用 EMQ 提供的免费公共 MQTT Broker,它基于完全托管的 MQTT 云服务 - EMQX Cloud 创建。服务器信息如下:

    Server: broker.emqx.io

    TCP Port: 1883

    WebSocket Port: 8083

    SSL/TLS Port: 8883

    Secure WebSocket Port: 8084

准备 MQTT 客户端

在本文中,我们将使用 MQTTX 提供的支持浏览器访问的 MQTT 客户端工具,访问地址为 http://www.emqx.io/online-mqtt-client 。 MQTTX 还提供了桌面客户端命令行工具

MQTTX 是一款跨平台的 MQTT 5.0 桌面客户端,可在 macOS、Linux、Windows 操作系统上运行。其用户友好的聊天式界面使用户能够轻松创建多个 MQTT/MQTTS 连接,并进行 MQTT 消息的订阅和发布。

MQTTX

目前,各种编程语言都拥有成熟的开源 MQTT 客户端库。我们在流行的 MQTT 客户端库和 SDK 中精选了多个编程语言的 MQTT 客户端库,并提供了详细的代码示例,旨在帮助您快速了解 MQTT 客户端的使用。

创建 MQTT 连接

在使用 MQTT 协议进行通信之前,客户端需要创建一个 MQTT 连接来连接到 Broker。

在浏览器中打开 http://www.emqx.io/online-mqtt-client , 点击页面中间的 New Connection 按钮,将看到如下页面。

创建 MQTT 连接

我们在 Name 中输入 Simple Demo,然后点击右上角的 Connect 按钮,建立一个 MQTT 连接。如下图所示,表示连接成功。

MQTT 连接成功

通过通配符订阅主题

接下来,我们在上面创建的 Simple Demo 连接中通过通配符订阅主题 sensor/+/temperature,这样就可以接收所有传感器发送的温度数据了。

如下图所示,点击 New Subscription 按钮,在弹出框中的 Topic 字段中输入主题 sensor/+/temperature,QoS 保持默认值 0。

订阅 MQTT 通配符主题

订阅成功后,会在订阅列表的中间看到新增了一条记录。

MQTT 主题订阅成功

发布 MQTT 消息

接下来,我们点击左侧菜单上的 + 按钮创建两个连接,分别命名为 Sensor 1Sensor 2,用来模拟两个温度传感器。

创建 MQTT 连接

连接创建成功后,会看到三个连接,每个连接左侧的在线状态指示灯都是绿色的。

三个连接创建成功

选择 Sensor 1 连接,在页面下方的发布主题中输入 sensor/1/temperature,在消息框中输入以下 JSON 格式的消息,然后点击右下方的发布按钮发送消息。

{
  "msg": "17.2"
}

发布 MQTT 消息

如下图所示,消息发送成功。

MQTT 消息发布成功

使用相同的步骤,在 Sensor 2 连接中发布以下 JSON 消息到 sensor/2/temperature 主题。

{
  "msg": "18.2"
}

您会看到 Simple Demo 连接收到两条新消息。

2条消息提示

点击 Simple Demo 连接,会看到两个传感器发送的两条消息。

查看消息详情

MQTT 功能演示

保留消息

当 MQTT 客户端向服务器发布消息时,可以设置保留消息标志。保留消息存储在消息服务器上,后续订阅该主题的客户端仍然可以收到该消息。

如下图所示,我们在 Sensor 1 连接中勾选 Retain 选项,然后向 retained_message 主题发送两条消息。

MQTT Retain

接着,我们在 Simple Demo 连接中订阅 retained_message 主题。订阅成功后,会收到 Sensor 1 发送的第二条保留消息,这说明服务器只会为主题保留最近的一条保留消息。

MQTT 保留消息

Clean Session

MQTT 客户端通常只能在在线状态下接收其它客户端发布的消息。如果客户端离线后重新上线,它将无法收到离线期间的消息。

但是,如果客户端连接时设置 Clean Session 为 false,并且使用相同的客户端 ID 再次上线,那么消息服务器将为客户端缓存一定数量的离线消息,并在它重新上线时发送给它。

本次演示使用的公共 MQTT 服务器设置为缓存 5 分钟的离线消息,最大消息数为 1000 条,且不保存 QoS 0 消息。

下面,我们创建一个 MQTT 3.1.1 连接,并用 QoS 1 来演示 Clean Session 的使用。

MQTT 5.0 中将 Clean Session 拆分成了 Clean Start 与 Session Expiry Interval。

创建一个名为 MQTT V3 的连接,设置 Clean Session 为 false,选择 MQTT 版本为 3.1.1。

设置 Clean Session 为 false

连接成功后,订阅 clean_session_false 主题,并将 QoS 设置为 1。

订阅 clean_session_false 主题

订阅成功后,点击右上角的断开按钮,断开连接。

断开 MQTT 连接

然后,创建一个名为 MQTT_V3_Publish 的连接,MQTT 版本也设置为 3.1.1。连接成功后,向 clean_session_false 主题发布三条消息。

创建一个名为 MQTT_V3_Publish 的连接

接着,选择 MQTT_V3 连接,点击连接按钮重新连接到服务器,会收到三条离线消息。

接收到三条离线消息

遗嘱消息

MQTT 客户端在向服务器发起 CONNECT 请求时,可以选择是否发送遗嘱消息标志,并指定遗嘱消息的主题和有效载荷。

如果 MQTT 客户端异常离线(在断开连接前没有向服务器发送 DISCONNECT 消息),MQTT 服务器会发布遗嘱消息。

我们创建一个名为 Last Will 的连接来演示这个功能。

  • 为了快速看到效果,我们把 Keep Alive 设置为 5 秒。
  • Last-Will Topic 设置为 last_will
  • Last-Will QoS 设置为 1
  • Last-Will Retain 设置为 true
  • Last-Will Payload 设置为 offline

创建名为 Last Will 的连接

连接成功后,我们断开电脑网络超过 5 秒(模拟客户端异常断开连接),然后再恢复网络。

接着启动 Simple Demo 连接,并订阅 last_will 主题。您会收到 Last Will 连接设置的遗嘱消息。

收到 Last Will 连接设置的遗嘱消息

深入学习 MQTT

本文详细介绍了 MQTT 的基本概念和使用流程,您可以按照本文所学的内容尝试使用 MQTT 协议。

如果您想了解更多 MQTT 的知识,建议您阅读 EMQ 提供的 MQTT 教程:从入门到精通系列文章,了解 MQTT 主题、通配符、保留消息、遗嘱消息等功能。通过这些文章,您将能够探索 MQTT 的更高级应用场景,并开始进行 MQTT 应用和服务的开发。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/the-easiest-guide-to-getting-started-with-mqtt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MQTT 协议入门:基础知识和快速教程 的相关文章

  • Mosquitto套接字读取错误Arduino客户端

    我刚刚从 Github 下载了最新的 Arduino 库代码 它破坏了我的 MQTT 客户端程序 我在 Arduino 上使用 PubSubClient 1 91 在 Mac OSX 上使用 Mosquitto 1 1 2 Build 20
  • 应用程序可以在 Android 和 IOS 模拟器中运行,但在发布后不能运行

    Problem 我创建了一个应用程序 它是 MQTT 代理客户端 当我使用 iOS Android 模拟器进行开发时 我与代理的连接工作正常 但是 当我发布 apk 版本时 我的应用程序无法连接 它有套接字问题 AMQJS0007E 套接字
  • 如何在 RSMB 中配置 MQTT-SN 主题 ID

    我的问题是关于通过 MQTT SN 网关使用 MQTT 主题名称和 MQTT SN 主题 ID 来配置 RSMB 使用 Really Small Message Broker 入门 信息对于了解在将两个 Very Small Message
  • 如何使用 MQTT Paho 在 RabbitMQ 队列中订阅

    我正在尝试从我的 Android 应用程序连接到一个名为 消息 的队列 生产者 AMQP 协议下的一种 Web 服务 已连接 可以通过 RabbitMQ 管理面板进行检查 为了从我的 Android 设备进行连接 我正在这样编码 priva
  • 在 mqtt.js 中发布无法访问的主题时如何捕获“访问错误”?

    我正在使用带有 mqtt js 的 node js 和 mosquitto 代理创建一个项目 在 mosquitto 配置文件中 我设置了 pwfile aclfile 来控制哪个用户可以访问哪个主题 如果用户名 密码 发布主题和订阅主题正
  • sim800L GPRS 发布请求

    我一直在研究 LoNet 迷你 GSM 模块 SIM800L 并将其与 Arduino 连接 我已插入 SIM 移动卡并且可以连接互联网 通过串行监视器 我可以毫无问题地与它通信 但是当向网络服务器页面发出 GET 或 POST 请求时 它
  • 我可以向通过 MQTT WebSocket 连接的一组 Azure IoT 中心设备发送消息吗?

    Goal 将消息发送到一组通过 MQTT WebSocket 连接的 Azure IoT 中心设备 初步想法 让一组 IoT 中心设备 组 X 订阅主题 X 的消息 Problem On the 使用 MQTT 协议与 IoT 中心通信 h
  • AWS IOT 连接在 IPAD OS v12.1.1 上关闭

    当我们在 ios 版本 12 1 1 上使用 wss 协议连接到 AWS IoT 时 我们能够成功连接到 IoT 但立即我们可以看到 IoT 触发 onError 事件 然后连接关闭 它尝试再次重新连接 但没有任何运气 我们从 IoT 得到
  • 了解 Azure 事件中心分区使用者模式

    Azure 事件中心使用分区使用者模式中描述的docs https learn microsoft com en us azure event hubs event hubs features 当涉及到现实世界场景时 我在理解该模型的消费者
  • 如何M2MQTT自动重连

    我正在尝试使用此协议 并且已经有 2 个客户端 一个用于发布 另一个用于订阅 和一个正在工作的经纪人 我的问题是我想在订阅客户端中实现重新连接功能 因为 wifi 信号不稳定并且不想每次都手动重新启动客户端 我该如何实现这一点 您可以使用
  • Raspberry 3 上的 GSM/GPRS 模块与 Android Things 原生集成

    我想知道是否有任何方法可以使 GPRS GSM 模块 SIM800L 作为 android 中的 默认 连接 允许浏览互联网并使用 Android 库发出请求 似乎不是 因为如this https stackoverflow com a 4
  • React Native 上的 MQTT?

    将 MQTT 添加到我的反应原生项目时 我很难找到正确的方法 该项目需要在 iOS 和 Android 上运行 因此理想情况下 MQTT 可以在 javascript 端处理 我意识到移动节点和经典节点的网络巢穴是不同的 所以我开始沿着分叉
  • 请求/响应的 MQTT 主题名称

    我正在设计一个包含许多设备的系统 使用 MQTT 连接到中央代理 有些主设备可以向某些从设备发送请求 来自一台主机的请求通常会发送给一台从机 请求的主题可以是 mysystem slaveId req 因此从站可以订阅该主题 并且主站可以发
  • 加特林负载测试期间编译错误

    我正在尝试编写一个模拟 并且希望能够运行该模拟 我在尝试 mvn gatling execute 时遇到错误 我的 pom 有以下依赖项
  • Android Ble GATT_ERROR 133 经常使用三星设备

    我正在研究 BLE 应用程序 我已经使用 Nexus Moto Samsung LG 等不同设备进行了测试 我仅在三星设备中收到 GATT 错误 133 三星 A5 2016 尝试连接 10 次 但只连接了 2 或 3 次 请帮助我 Non
  • 在文件之间共享 mqtt 客户端对象

    我这样连接到 MQTT mqtt js const mqtt require mqtt var options needed options var client mqtt connect mqtt someURL options clie
  • 为什么 Azure IoT 中心中有主键和辅助键?

    在 Azure IoT 中心创建共享访问策略或注册设备时 将生成主密钥和辅助密钥对 我注意到我可以使用主键或辅助键将设备连接到 IoT 中心 那么 拥有主键 辅助键的目的是什么 我应该如何设计这两个键的使用 主键和辅助键的目标有两个 首先
  • OPC UA 协议与 MQTT 协议

    我想根据两种协议的一般特征 例如开销 数据包 安全性 信息建模和可靠性 来比较 OPC UA 与 MQTT 我在哪里可以找到每个协议的开销和其他特征的一些示例数据 以便我对它们进行比较 我需要你的建议 您可以推荐任何工具来比较这些协议 MQ
  • 可以在 lambda 中订阅 aws IOT 主题吗?

    新手问题 找不到以前的答案 我想用 Alexa 构建一个简单的泵控制器 希望 Alexa 报告泵状态 最简单的方法是 Alexa gt lambda gt publish to Iot 然后 或者可能在发布之前 订阅另一个主题 本地控制器将
  • 在 python 中使用 IOT 适配器和 google pub/sub api 将 MQTT 与 GCP 集成

    与 App Engine Standard 中的 Cloud Pub Sub API 集成 我正在标准 Python 环境中开发 Google 应用程序引擎应用程序 对于代码的某些部分 我需要与 Google Cloud pub sub A

随机推荐

  • [译] APT分析报告:08.漏洞利用图谱–通过查找作者的指纹来寻找漏洞

    这是作者新开的一个专栏 主要翻译国外知名安全厂商的APT报告 了解它们的安全技术 学习它们溯源APT组织和恶意代码分析的方法 希望对您有所帮助 当然 由于作者英语有限 会借助机翻进行校验 还请包涵 前文分享了APT组织拉撒路 Lazarus
  • docker安装kafka

    一 概述 Kafka是由Apache基金会开发的分布式流处理平台 采用发布 订阅模式 支持高吞吐量 低延迟的数据传输 主要用于处理实时数据管道 数据存储和数据分析等大数据应用场景 Kafka采用高效的数据压缩算法 可以在集群中存储大量的数据
  • 【网络】udp_socket编程

    目录 1 认识端口号 1 1 理解端口号和进程ID 1 2 理解源端口号和目的端口号 2 认识TCP协议 3 认识UDP协议 4 网络字节序 5 socket编程接口 5 1socket常见API 5 2sockaddr结构 sockadd
  • Java业务开发常见错误100例总结

    最近在极客时间上看了 Java业务开发常见错误100例 收获还是很大 我个人是很认真地刷了两遍 并花了二十来个晚上认真整理了一份脑图包括大纲和每个知识点的详细笔记 虽然Github上有原创作者整理的版本 效果如下 全部内容如下 自己整理一遍
  • linux(RedHat)启动无法进入图形界面,出现灰色屏幕。

    问题描述 安装完某些软件如DB2 Oracle等 可能出现启动系统 检查完各种硬件设备 但是没有出现登陆界面 出现的 是灰色屏幕 解决过程 初步猜测是无法启动图形界面 进一步论证的方法是在启动时 按下entre键 选择你按装的或者是要更改的
  • JavaScript实现人民币大小写转换

    当使用支票或者签署合同时 需要用到大写人民币 常用的中文大写包括零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万 亿 本文介绍下如何使用JavaScript实现将阿拉伯数字的人民币转换成大写 工具地址 人民币大小写转换工具 人民币大小
  • uni-app自定义配置安卓模拟器 - MuMu模拟器

    第一步 下载MuMu模拟器 下载地址 http mumu 163 com 第二步 配置模拟器端口以及abd路径 该路径在HBuilder安装目录中 然后继续打开你的HBuilder编辑器 运行 运行到手机或模拟器 安卓模拟器端口配置 第三步
  • Oracle查询入门(五)连表查询

    定义 表连接查询 当要查询的数据来自于多个数据源 现在主要有92语法和99语法 92语法 select 数据 from 数据源1 数据源2 where 行过滤条件 group by 分组字段1 分组字段2 having 组过滤信息 orde
  • 仲裁文件夹服务器,存储仲裁服务器

    存储仲裁服务器 内容精选 换一换 帮助用户完成专属云服务器备份任务的创建 快速完成服务器数据保护 专属云服务器不支持应用一致性备份 当专属对象存储的容量不足时 会导致专属云服务器备份创建失败 已开通专属对象存储 登录管理控制台 单击 选择
  • IBM小型机安装AIX系统

    1 系统开机自检 系统开机后会进行自检 前置面板绿灯闪烁 此时放入系统光盘 2 系统菜单 系统自检完成后会显示菜单 按1进入系统菜单 这里要尽快输入 否则会进入之前的系统 3 输入密码 进入系统菜单后 出现两个选项 选择第二项输入密码 默认
  • html层级显示优先,CSS 样式的层叠和优先级说明

    上面说了浏览器要查看的所有样式来源后 现在聊一下浏览器显示元素时确认一个 CSS 属性值的次序 补充 CSS 样式由一条或者多条以分号分割开的样式声明组成 每条声明包含着一个 CSS 属性和该属性的值 两者以冒号分割 一 CSS 样式的层叠
  • 期货开户CTP高性能高容量高可靠性

    一 交易通道选择 CTP交易通道是就是上期技术 是上海期货信息技术有限公司研发的期货行业技术最先进的交易系统 具备每秒2000笔交易处理能力和1毫秒的行情更新速度 保障交易系统的最高可靠性 该通道是十分成熟的交易平台 目前主流期货公司中绝大
  • 在网页中内嵌网页

    目录 文章目录 前言 代码展示 主页代码 展示作品的代码 球体运动 方块旋转 结果演示 前言 在制作个人网站时 经常遇到一个问题 就是如何让自己的作品动态的显示在主页上 而本文就是找到了解决办法 利用标签 引入想要的结果 代码展示 主页代码
  • 自学Python能做哪些副业?我一般不告诉别人

    Python作为今天的互联网不可或缺的一门技能 可以成为自己的主业以外 其实它也还是可以成为副业的 那么学好python后可以从事的副业有哪些呢 自学Python能干的副业 1 兼职处理数据 分析数据是很重要的一点 那么利用python 就
  • 结构化思维的训练方式

    转自 https www sohu com a 198266900 628522 结构化思维 Structured Thinking 是指人在面对工作任务或者难题时 能从多个侧面进行思考 深刻分析导致问题出现的原因 系统制定行动方案 并采取
  • python实现剪刀石头布小游戏

    首先实现系统随机出剪刀石头布 import random 首先导入random模块 k 剪刀 石头 布 创建一个列表 列表共有我们所需要用到的三个元素 m random choice k 用该函数随机从k中取一个元素并赋值给m m便为剪刀石
  • MySql嵌套查询+关联查询+多表查询+对应案例+mybatis动态sql 超详细

    最近学习MyBatis框架 用到多表查询比较多 以前学的不是很好 今特意回来补上 呜呜呜 有对MySql数据库的初步使用不是很了解的朋友们 可以切换到这里噢 https blog csdn net haobo article details
  • [CMake教程] if 和 else

    目录 一 基本语法 二 基本用法 三 其他用法 3 1 逻辑运算 3 2 存在性检查 3 3 文件操作 3 4 数值比较 3 5 字符串比较 3 6 版本比较 3 7 路径比较 CMake 3 24引入 一 基本语法 if
  • 华为od机考真题-最少面试官数

    while 1 try n int input nums for in range n nums append list map int input
  • MQTT 协议入门:基础知识和快速教程

    本文是 MQTT 协议的入门指南 提供了实用的代码示例 物联网和 MQTT 的初学者可以通过本文掌握 MQTT 的基本概念 快速开启 MQTT 服务和应用的开发 什么是 MQTT MQTT Message Queuing Telemetry