在 Windows 平台搭建 MQTT 服务

引言

MQTT 是一种轻量级、基于发布/订阅模式的消息传输协议,旨在用极小的代码空间和网络带宽为物联网设备提供简单、可靠的消息传递服务。MQTT 经过多年的发展,如今已被广泛应用于资源开采、工业制造、移动通信、智能汽车等各行各业,使得 MQTT 成为了物联网传输协议的事实标准。

出于稳定性、可靠性、成本等多方面的考虑,众多 MQTT 服务实现更倾向于选择拥有丰富开源生态系统的 Linux 环境,Windows 平台上可选的 MQTT 服务相对有限。NanoMQ 是用于物联网边缘的超轻量级 MQTT 消息服务器,具有极高的性能性价比,适用于各类边缘计算平台。NanoMQ 有着强大的跨平台和可兼容能力,不仅可以用于以 Linux 为基础的各类平台,也为 Windows 平台提供了 MQTT 服务的新选择。

本文将以 NanoMQ 为例,使用二进制包和源代码编译两种方式演示如何在 Windows 平台中快速搭建 MQTT 服务。

NanoMQ 简介

NanoMQ 是 EMQ 于 2021 年发布的开源项目,旨在为物联网边缘场景提供轻量级、快速、支持多线程的 MQTT 消息服务器和消息总线。NanoMQ 基于 NNG 的异步 I/O 构建,内置 Actor 多线程模型。相较于 Mosquitto 的单线程设计,NanoMQ 能够充分发挥现代 SMP 系统的多核优势,在边缘多核环境中展现出了比 Mosquitto 高达 10 倍的性能表现。NanoMQ 基于标准 POSIX 接口开发,可以轻松通过 MinGW 的 POSIX 编译环境移植到各类 Windows 环境中。经过三年研发迭代,NanoMQ 于 2024 年 1 月正式加入 LF Edge 基金会,未来将与 LF Edge 旗下的 EdgeX Foundry 框架深度集成,共同促进物联网边缘设备和应用之间的互操作性。

NanoMQ

NanoMQ 主要具有以下特性:

  • 超轻量化:安装包约 200KB 左右,运行占用资源极小。根据编译和启动的配置,启动所需内存资源从300Kb 到 3Mb 不等。
  • 兼容性和可移植性:NanoMQ 采用纯净的 C/C++ 开发,只依赖于标准 POSIX API,同时支持大小端兼容,可无缝对接各类网络应用,零成本迁移到各类嵌入式平台。
  • 可伸缩性:借助内置的异步 IO 架构和多线程模型,NanoMQ 在保持轻量化的同时仍具备一定可横向拓展的并发吞吐能力。仅需不到 10MB 的内存消耗,即可支持超过 10W 的消息吞吐。
  • SMP 支持:NanoMQ 在边缘多核平台上对 SMP 有着良好的支持,能够充分发挥多处理器的能力,从而提升系统性能。
  • 容器支持:NanoMQ 能够轻松地通过容器进行部署和运行,并且与主流的边缘容器编排方案兼容,使得部署过程更加灵活和便捷。

二进制包安装

首先进入 NanoMQ 官网下载页面,选择 Windows 平台下载安装包:

下载 NanoMQ

可以在解压后文件夹中的bin目录下用 Windows 命令行使用 NanoMQ。将解压后的 C:\xxx\nanomq-0.21.10-windows-x86_64\bin 目录添加到环境变量中,则可以在 Windows 命令行或者 PowerShell 中直接使用 NanoMQ。输入 nanomq --help 可以看到简要的使用说明。

NanoMQ 命令

使用 nanomq start --conf C:\nanomq\config\nanomq.conf 启动 NanoMQ。其中 C:\nanomq\config\nanomq.conf 为 NanoMQ 配置文件的地址,配置文件示例可以在解压后文件夹中的 config 目录下找到。NanoMQ 的详细配置说明请参见官方文档。

接下来使用 NanoMQ 的 MQTT 客户端工具 nanomq_cli 来进行 NanoMQ 的使用说明。nanomq_cli 同样可以在 bin 目录下找到。

nanomq_cli

从上图中可以看到 nanomq_cli 的通过 sub 命令订阅了主题 nmqtest,接收到了 nanomq_cli 通过 pub 命令发布的 HelloWorld 消息。

源码编译与运行

在 Windows 平台编译需要提前准备 MinGW-w64、Make 和 CMake。

  • MinGW-w64 是将 GCC 编译器和 GNU Binutils 移植到 Windows 平台下的产物,包括一系列头文件(Win32API)、库和可执行文件,是一个在 Windows 平台上开发和运行原生 Windows 应用程序的开源软件开发环境。Cygwin 同 MinGW 类似,也用于移植 Unix 软件到 Windows,但它们采用截然不同的实现。Cygwin 重视兼容性优先于性能,MinGW 则着重于简化与性能。本文将以 MinGW 为例进行 NanoMQ 的编译。
  • Make 和 CMake 则是用于 NanoMQ 项目自动化构建的工具。参考下载地址:MingGW-w64,Make,CMake。其中 MinGW-w64 应尽量选择较新版本。

接下来在 Windows 命令行、PowerShell 或者 Git Bash 中输入以下命令:

# 1. clone 源码 (已通过ZIP下载源代码则不需要这一步)
PS: D:\Project> git clone https://github.com/nanomq/nanomq.git
PS: D:\Project> cd nanomq# 2. 更新和初始化 git 子模块
PS: D:\Project\nanomq> git submodule update --init --recursive# 3. 创建并进入 build 目录
PS: D:\Project\nanomq> mkdir build
PS: D:\Project\nanomq> cd build# 4. 编译 NanoMQ
PS: D:\Project\nanomq\build> cmake -G "MinGW Makefiles" ..
PS: D:\Project\nanomq\build> make -j 8# 5. 运行 NanoMQ
PS: D:\Project\nanomq\build> .\nanomq\nanomq.exe broker start

除了 NanoMQ 自带的客户端工具,还可以使用开源 MQTT 客户端工具 MQTTX 来进行消息收发测试。

MQTTX

从上图中同样可以看到,订阅了 nmqtest 主题的客户端通过 NanoMQ 收到了另一个客户端发布的 hello 消息。

结语

本文通过二进制包和源码编译的方式完成了 NanoMQ 在 Windows 平台的安装,并对其使用进行了演示测试。NanoMQ 为在 Windows 平台上构建物联网边缘计算应用提供了一个便捷而强大的选择。它的轻量级、高性能以及专注于边缘计算的设计使其成为一个理想的消息传输解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇聚荣做拼多多电商怎么样?

汇聚荣做拼多多电商怎么样?在当前电商平台竞争激烈的背景下,拼多多凭借其独特的商业模式和市场定位迅速崛起。对于想要加入拼多多的商家而言,了解平台的特点、优势及挑战是至关重要的。本文将深入分析加入拼多多电商的多个方面,帮助读者全面…

ubuntu计划任务反弹

目录 实验环境 实验步骤 目标主机构造任务计划 构造语句 语句解释 kali开启监听 监听成功 问题 原因 实验环境 攻击者 操作系统:kali IP:192.168.244.141 目标主机 操作系统:ubuntu IP:192.168.244.151 实验步骤 目…

论文学习_An Empirical Study of Deep Learning Models for Vulnerability Detection

1. 引言 研究背景:近年来,深度学习漏洞检测工具取得了可喜的成果。最先进的模型报告了 0.9 的 F1 分数,并且优于静态分析器。结果令人兴奋,因为深度学习可能会给软件保障带来革命性的变化。因此,IBM、谷歌和亚马逊等行业公司非常感兴趣,并投入巨资开发此类工具和数据集。…

(8)揭示Python编程精髓:深潜继承与多态的奇幻之旅

目录 1. 命名空间与作用域1.1 命名空间概述1.2 作用域1.2.1 局部作用域1.2.2 全局作用域1.2.3 修改全局变量1.2.4 嵌套作用域 2. 继承3. 多态(Polymorphism) 1. 命名空间与作用域 1.1 命名空间概述 命名空间是一个从名字到对象的映射,它在P…

Qt:19.浮动窗口/子窗口(子窗口介绍、代码方式创建子窗口、设置子窗口标题、为子窗口添加控件、设置子窗口停靠位置)

目录 1.子窗口介绍: 2.代码方式创建子窗口: 3.设置子窗口标题: 4.为子窗口添加控件: 5.设置子窗口停靠位置。 1.子窗口介绍: 在 Qt 中,可以创建和管理子窗口(子窗口体)以实现多窗…

图片怎么制作成长期可用的活码?扫码提供图片预览的制作技巧

现在图片的尺寸和清晰度的质量越来越高,相对应的会占用更多的存储空间,现在很多人会将图片存入云端后,通过生成二维码的方式,扫码来查看图片内容。图片转换二维码有利于将图片分享给其他人查看,还能够节省更多的空间&a…

SpringBoot自己开发一个starter

提示:本文主要讲述如何自行开发一个SpringBoot的starter 文章目录 目录 文章目录 前言 一、Starter是什么 二、创建一个SpringBoot项目 1.创建一个基本的SpringBoot项目 2.选择要下载的库 三、设置项目 1.提示 2.配置pom.xml 3.重点代码 1.创建一个User类…

16.x86游戏实战-汇编指令push pop pushad popad

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【第29章】MyBatis-Plus之分页插件

文章目录 前言一、支持的数据库二、配置方法三、属性介绍四、自定义 Mapper 方法中使用分页五、其他注意事项六、Page 类七、实战1. 配置类2. 分页类3. 测试 总结 前言 MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库&a…

Windows电脑安装Python结合内网穿透轻松搭建可公网访问私有网盘

文章目录 前言1.本地文件服务器搭建1.1.Python的安装和设置1.2.cpolar的安装和注册 2.本地文件服务器的发布2.1.Cpolar云端设置2.2.Cpolar本地设置 3.公网访问测试4.结语 前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言,在自己的电脑上搭建…

电力需求预测挑战赛笔记 Taks1 跑通baseline

#AI夏令营 #Datawhale #夏令营 赛题 一句话介绍赛题任务可以这样理解赛题: 【训练时序预测模型助力电力需求预测】 电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。 赛题任务 给定多个房屋对应电力消耗历史 N 天的相关序列数…

09.AOP-尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)

现有代码缺陷 针对带日志功能的实现类,我们发现有如下缺陷: 对核心业务功能有干扰,导致程序员在开发核心业务功能时分散了精力附加功能分散在各个业务功能方法中,不利于统一维护 解决思路 解决核心:解耦。把附加功能从…

从零开始读RocketMq源码(三)Broker存储Message流程解析

目录 前言 准备 消息载体CommitLog 文件持久化位置 源码解析 broker消息对象MessageExtBrokerInner 异步存储message CommitLog的真相 创建MappedFile文件 加入异步刷盘队列 Message异步存储MappedByteBuffer 总结 前言 在面试中我们经常会听到这样的回答&#x…

国产化趋势下源代码数据防泄密的信创沙盒的方案分享

随着国产化的大力推进,越来越多的企事业单位在逐步替换Windows、Linux等操作系统的使用。那么什是国产化了?国产化是指在产品或服务中采用国内自主研发的技术和标注,替代过去依赖的他国的产品和服务,国产化又被称之为“信创”&…

GitLab CI/CD实现项目自动化部署

1 GitLab CI/CD介绍 GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)工具。这套系统允许开发团队…

vue里实现点击按钮回到页面顶部功能,博客必备!

效果 步骤 1-标签结构 动态绑定样式style&#xff0c;监听点击事件&#xff0c;后续控制opacity透明度。和滚动距离 <div class"toTop" :style"dynamicStyles" click"toTop"><!--<i class"fa fa-arrow-up"></i>…

超简单的通配证书签发工具,免费,无需安装任何插件到本地

常见的acme.sh 或者 lego等工具需要配置&#xff0c;安装不灵活&#xff0c;续签需要配置计划任务&#xff0c;签发单域名证书或者通配证书需要不同的指令和配置&#xff0c;繁琐&#xff0c;如果自己程序想要对接签发证书的api有的不支持&#xff0c;有的用起来繁琐。 最近发…

【VIVADO SDK调试遇到DataAbortHandler】

问题 SDK调试遇到DataAbortHandler问题。 运行后不显示结果&#xff0c;debug模式下发现进入DataAbortHandler异常函数。程序中存在大数组。 原因:SDK默认的堆栈为1024bytes,需要将堆栈调大。 修改方法&#xff1a; 解决:对application中src下的lscript.ld双击&#xff0c;…

Linux 程序卡死的特殊处理

一、前言 Linux环境。 我们在日常编写的程序中&#xff0c;可能会出现一些细节问题&#xff0c;导致程序卡死&#xff0c;即程序没法正常运行&#xff0c;界面卡住&#xff0c;也不会闪退... 当这种问题出现在客户现场&#xff0c;那就是大问题了。。。 当我们暂时还无法排…

如何定量选择孔销基准?-DTAS来帮你!

在当今快速发展的工程领域&#xff0c;公差仿真的作用日渐重要&#xff0c;在公差仿真中&#xff0c;基准体系的选择对于最终结果更是至关重要。基准体系不同可能导致仿真过程中的参数计算、误差分析以及最终的工程设计都有所不同。基准体系作为评估和比较的参照&#xff0c;直…