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

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

使用 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 的通过 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 来进行消息收发测试。

从上图中同样可以看到,订阅了 nmqtest 主题的客户端通过 NanoMQ 收到了另一个客户端发布的 hello 消息。
结语
本文通过二进制包和源码编译的方式完成了 NanoMQ 在 Windows 平台的安装,并对其使用进行了演示测试。NanoMQ 为在 Windows 平台上构建物联网边缘计算应用提供了一个便捷而强大的选择。它的轻量级、高性能以及专注于边缘计算的设计使其成为一个理想的消息传输解决方案。
相关文章:
在 Windows 平台搭建 MQTT 服务
引言 MQTT 是一种轻量级、基于发布/订阅模式的消息传输协议,旨在用极小的代码空间和网络带宽为物联网设备提供简单、可靠的消息传递服务。MQTT 经过多年的发展,如今已被广泛应用于资源开采、工业制造、移动通信、智能汽车等各行各业,使得 MQ…...
jdevelope安装
准备 1.jdk1.8(已经安装不做记录) 2.下载jdevelope安装包 3.安装包安装jdevelope开发工具 4.创建或导入项目 下载jdevelope安装包 官网下载地址:https://edelivery.oracle.com 安装包安装jdevelope开发工具 cmd管理员权限运行安装脚本…...
排序(一)——冒泡排序、直接插入排序、希尔排序(BubbleSOrt,InsertSort,ShellSort)
欢迎来到繁星的CSDN,本期的内容主要包括冒泡排序(BubbleSort),直接插入排序(InsertSort),以及插入排序进阶版希尔排序(ShellSort)。 废话不多说,直接上正题! 一、冒泡排序 冒泡排序…...
synchronized关键字详解(全面分析)
目录 synchronized关键字详解1、synchronized关键字简介2、synchronized作用和使用场景作用使用场景①、用在代码块上(类级别同步)②、用在代码块上(对象级别同步)③、用在普通方法上(对象级别同步)④、用在静态方法上(类级别同步)总结: 3、synchronized底层原理&am…...
数据建设实践之大数据平台(三)
安装hadoop 上传安装文件到/opt/software目录并解压 [bigdatanode101 software]$ tar -zxvf hadoop-3.3.5.tar.gz -C /opt/services/ 配置环境变量 [bigdatanode101 ~]$ sudo vim /etc/profile.d/bigdata_env.sh export JAVA_HOME/opt/services/jdk1.8.0_161 export ZK_HO…...
TypeScript中的交叉类型
交叉类型:将多个类型合并为一个类型,使用&符号连接。 type AProps { a: string }type BProps { b: number }type allProps AProps & BPropsconst Info: allProps {a: 小月月,b: 7} 我们可以看到交叉类型是结合两个属性的属性值,那…...
CNN -1 神经网络-概述2
CNN -1 神经网络-概述2 一:神经网络(operator)1> 线性层(Fully Connected Layer)2> 卷积层(Convolutional Layer)3> 池化层(Pooling Layer)4> 循环层(Recurrent Layer)5> 归一化层(Normalization Layer)6> 激活函数(Activation Function)7>…...
利用js实现图片压缩功能
图片压缩在众多应用场景中扮演着至关重要的角色,尤其是在客户端上传图片时。原始图片往往体积庞大,直接上传不仅消耗大量带宽资源,还可能导致上传速度缓慢,严重影响用户体验。因此,在图片上传至服务器前对其进行压缩处…...
2024.7.10 刷题总结
2024.7.10 **每日一题** 2970.统计移除递增子数组的数目 Ⅰ,这道题是一个考察双指针的题目,也考察了数组的基本性质。题目的意思是要统计有多少个子数组能满足移除后剩下的元素为严格递增的关系,刚开始没考虑到移除的元素要是连续的ÿ…...
ES6 async 函数详解 (十)
async 函数是什么?一句话,它就是 Generator 函数的语法糖。 const gen function* () {const f1 yield readFile(/etc/fstab);const f2 yield readFile(/etc/shells);console.log(f1.toString());console.log(f2.toString()); };const asyncReadFile …...
【安全设备】入侵检测
一、什么是入侵检测 入侵检测是一种网络安全技术,用于监测和识别对计算机系统或网络的恶意使用行为或未经授权的访问。入侵检测系统(IDS)是实现这一目标的技术手段,其主要目的是确保计算机系统的安全,通过及时发现并报…...
07浅谈大语言模型可调节参数tempreture
浅谈temperature 什么是temperature? temperature是大预言模型生成文本时常用的两个重要参数。它的作用体现在控制模型输出的确定性和多样性: 控制确定性: temperature参数可以控制模型生成文本的确定性,大部分模型中temperatur…...
Redis数据同步
文章简单介绍基于redis-shake的redis数据同步,该工具基于每个节点同步数据,即每个主节点需同步一次,才能完成整个redis集群的数据同步。 1、redis节点操作 ### 查看redis版本 ./bin/redis-server --version### 登录redis ./bin/redis-cli -…...
快手矩阵源码,快速拥有自己的短视频矩阵
在数字化浪潮席卷全球的今天,短视频已成为内容传播的新宠,而如何高效、精准地管理多平台、多账号,实现短视频内容的快速制作与发布,是每个自媒体人都在思考的问题。快手矩阵源码,作为一款集多平台管理、多账户管理、短…...
notes for datawhale 2th summer camp NLP task1
//I wrote this note in obsidian and copied it here. The strange format in this note is due to lack of obsidian plugins. tags: AI-studyML status: done 目标:跑通baseline,体验NLP模型解决问题的流程,基本了解赛题要求,…...
攻防世界(PHP过滤器过滤)file_include
转换过滤器官方文档:https://www.php.net/manual/zh/filters.convert.php#filters.convert.iconv 这道题因为convert.base64-encode被过滤掉了,所以使用convert.iconv.*过滤器 在激活 iconv 的前提下可以使用 convert.iconv.* 压缩过滤器, 等…...
PostGIS2.4服务器编译安装
PostGIS的最新版本已经到3.5,但是还有一些国产数据库内核使用的旧版本的PostgreSQL,支持PostGIS2.4。但PostGIS2.4的版本已经在yum中找不到了,安装只能通过本地编译的方式。这里介绍一下如何在Centos7的系统上,编译部署PostGIS2.4…...
虚拟机安装Linux CENTOS 07 部署NET8 踩坑大全
首先下载centos07镜像,建议使用阿里云推荐的地址: https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.59b5f5ad5Nfr0X 其实这里就已经出现第一个坑了 centos 07 /usr/lib64/ 的 libstdc.so只支持到19; GLI…...
【C++】CMake入门
CMake 是一个跨平台的构建系统生成工具,可以生成用于编译和链接应用程序的构建文件(如 Makefile 或 Visual Studio 工程文件)。 安装 CMake Windows 可以从 CMake官网 下载并安装 Windows 版本的 CMake。安装完成后,确保将 CMak…...
云WAF | 云waf保护你的网络安全
随着时代的发展,云计算与网络安全成为当今社会的热点问题。由于网络环境的日益复杂,网络安全问题日益突出,网络安全问题日益突出。近年来,各类网络安全工具与技术层出不穷,以保障用户信息及企业财产安全。云服务防火墙…...
Pandoc文档转换工具:从格式混乱到文档自由的工作流革命
Pandoc文档转换工具:从格式混乱到文档自由的工作流革命 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 你是否曾为文档格式转换而烦恼?面对Markdown、Word、PDF、HTML等不同格式的文档…...
用磅蛋糕类比理解神经网络:零基础学AI的具象化教学法
1. 项目概述:当神经网络遇上磅蛋糕——这不是比喻,是教学法的底层重构“Neural Networks With Pound Cakes and a Little Math”这个标题一出现,我就在咖啡馆里笑出了声。不是因为它轻浮,恰恰相反——它精准戳中了当前AI科普最顽固…...
别再乱设边界了!HFSS中辐射边界(Radiation)与理想匹配层(PML)的实战对比与设置要点
HFSS仿真中的边界条件艺术:Radiation与PML的深度解析与实战选择 在电磁场仿真领域,边界条件的设置往往决定了模拟结果的准确性与计算效率。对于天线设计、雷达散射截面(RCS)分析等开放空间电磁问题,工程师们常常面临一个关键选择:…...
TinyRS-R1:轻量级遥感视觉语言模型的技术解析与应用
1. TinyRS-R1:轻量级遥感视觉语言模型的技术解析 在遥感图像分析领域,视觉语言模型(Vision-Language Models, VLMs)正逐渐成为关键技术。这类模型能够同时理解图像内容和自然语言描述,为卫星和航拍图像的分析提供了全新…...
ESP32音频录制系统:构建智能声音采集的完整解决方案
ESP32音频录制系统:构建智能声音采集的完整解决方案 【免费下载链接】esp32_SoundRecorder ESP32 Sound recorder with simple code in arduino-esp32. (I2S interface) 项目地址: https://gitcode.com/gh_mirrors/es/esp32_SoundRecorder 在物联网和嵌入式系…...
终极APK编辑指南:APK Editor Studio完整使用教程
终极APK编辑指南:APK Editor Studio完整使用教程 【免费下载链接】apk-editor-studio Powerful yet easy to use APK editor for PC and Mac. 项目地址: https://gitcode.com/gh_mirrors/ap/apk-editor-studio APK Editor Studio是一款功能强大且易于使用的A…...
3个核心优势:用AI智能体彻底解放你的桌面生产力
3个核心优势:用AI智能体彻底解放你的桌面生产力 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop 在数…...
Office RibbonX Editor:免费开源Office界面定制终极解决方案
Office RibbonX Editor:免费开源Office界面定制终极解决方案 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/gh_mirrors/of/office-ribbonx-…...
[模型解析] GPT: 模型演进分析从GPT-3到GPT-5.5
GPT 模型演进分析:从 GPT-3 到 GPT-5.5 OpenAI 的 GPT 系列模型在过去几年经历了快速演进,从 2020 年的 GPT-3 到 2026 年的 GPT-5.5,每一次迭代都带来了显著的能力提升和架构创新。本文将系统分析 GPT 模型的演进路径与技术特点。 一、GPT 模…...
深入Linux内核:图解PTP硬件时间戳(HW Timestamp)从网卡到用户空间的完整路径
深入Linux内核:图解PTP硬件时间戳从网卡到用户空间的完整路径 1. 高精度时间同步的技术演进与PTP核心价值 在分布式系统与工业自动化领域,微秒级甚至纳秒级的时间同步已成为刚需。传统NTP协议受限于软件实现和网络抖动,精度通常只能达到毫秒级…...
