草庐IT

Windows下搭建MQTT服务器

CodingPioneer 2023-05-27 原文

Windows下搭建MQTT服务器

1、MQTT服务器软件筛选

MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于低带宽受限环境。
特点包括以下:

  • 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
  • 对负载内容屏蔽的消息传输。
  • 使用TCP/IP提供网络连接。
  • 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
  • 使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
  • 有三种消息发布服务质量:
  • (1)“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  • (2)“至少一次”,确保消息到达,但消息重复可能会发生。
  • (3)“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

能够搭建MQTT服务器的软件有很多,比如:

  • mosquitto,Eclipse Mosquitto使用 C 语言实现的 MQTT 服务器。
  • EMQX,使用 Erlang 语言开发的 MQTT 服务器,内置强大的规则引擎,支持许多其他 IoT 协议比如 MQTT-SN、 CoAP、LwM2M 等。
  • Mosca,使用 Node.JS 开发的 MQTT 服务器,简单易用。
  • VerneMQ,使用 Erlang 开发的 MQTT 服务器。

本文是以mosquitto在windows下搭建过程为例进行介绍。

2、MQTT服务器软件mosquitto下载

1、进入mosquitto下载网址:https://mosquitto.org/download/,如下图:

2、点击上图中红框的链接进行下载,下载到本地计算机,如下图:

3、右键点击mosquitto-2.0.14-install-windows-x64.exe以管理员身份进行安装,如下图:

4、点击"Next >"按钮,如下图:

5、继续点击“Next >”按钮,如下图:

6、可以更改安装目录,我更改到D盘,点击“Install”按钮,如下图:

7、等待安装完毕,如下图:

8、点击"Finish"按钮,至此安装完成。

3、修改mosquitto配置,并启动mosquitto服务

1、安装完毕后,需要对配置文件进行修改,配置文件位置:D:\mosquitto\mosquitto.conf,如下:

2、这里我们主要是改一下侦听端口和开启用户验证(即设置用户名和密码)
2.1 修改侦听端口
打开mosquitto.conf,找到linstener,取消前面的#注释,并指定要侦听的端口,如下:

listener 7788

2.2 设置用户名密码
2.2.1 找到找到allow_anonymous节点,这个节点作用是,是否开启匿名用户登录,默认是true。打开此项配置(将前面的 # 号去掉)之后将其值改为true

修改前:#allow_anonymous
修改后:allow_anonymous false

2.2.2 找到password_file节点,这个节点是告诉服务器你要配置的用户将存放在哪里。打开此配置并指定pwfile.example文件路劲(注意是绝对路劲)

修改前:#password_file
修改后:password_file D:\pwfile.example

3、在管理工具->服务,中找到Mosquitto Broker,启动mosquitto服务,如下图:

4、以管理员身份打开CMD,并切换到d:/mosquitto目录下,运行以下命令添加用户名和密码:

mosquitto_passwd.exe -c d:/pwfile.example admin

提示连续两次输入密码、创建成功。命令解释: -c 创建一个用户、/etc/mosquitto/pwfile.example 是将用户创建到 pwfile.example 文件中、admin 是用户名。如下图:

注意:添加用户和密码后,需要对mosquitto服务进行重启才能生效。

4、利用mosquitto工具测试订阅与发布

再以管理员启动2个CMD窗口,并进入d:/mosquitto目录,cmd窗口1作为订阅者,cmd窗口2作为发布者,如下图:

在cmd窗口1中执行以下命令,进行消息订阅

mosquitto_sub.exe -h 127.0.0.1 -p 7788 -u admin -P 123456 -v -t sensor

在cmd窗口2中执行以下命令,进行消息发送

mosquitto_pub.exe -h 127.0.0.1 -p 7788 -u admin -P 123456 -t sensor -m "消息测试"

如下图:

5、可视化MQTT客户端工具MQTTX使用

MQTT的客户端测试工具有很多,而MQTTX无疑是其中的佼佼者,下面就介绍一下其使用过程。
1、首先从官网下载,MQTTX下载地址:https://github.com/emqx/MQTTX/releases

2、选择适合你操作系统的版本进行下载,如下图:

3、下载后如下图:

4、以管理员方式安装MQTTX-Setup-1.7.3.exe,如果出现Microsoft Defender SmartScreen阻止提示,则点击“仍要运行”,如下图:

5、安装步骤如下图:

6、安装过程中可以更改安装目录,如下图:

7、点击“安装”按钮,如下图:

8、安装完毕是会出现完成提示,如下图:

9、勾选运行MQTTX(R),点击“完成”按钮,则运行MQTTX,如下图:

10、点击“New Connection”按钮,则出现新建连接对话框,根据MQTT服务器的信息,输入对应的参数,如下图:

11、点击Connect按钮,如下图:

12、如果想订阅一个主题,则点击“New Subscription”按钮,则出现新建订阅对话框,如下图:

13、输入对应的主题后,点击“Confirm”按钮,如下图:

14、结合CMD窗口使用mosquitto_pub.exe发布工具发一个消息测试一下,如下图:

从上图中可以看出,订阅的主题已经接收到了测试的消息。

有关Windows下搭建MQTT服务器的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  5. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  6. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  7. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  8. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  9. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  10. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

随机推荐