前言
MQTT有三个角色,代理(broker)、发布者(publisher)、订阅者(subscriber)
举例说明:代理(视频网站)、发布者(视频创作者)、订阅者(其他用户)
发布者(客户端A)发布视频---->代理(服务器)---->订阅者(客户端B)关注发布者即可看到视频
1. 环境准备
同一网段下的两台电脑,这里我用的家里在同一Wifi下的两台笔记本。
通过CMD的ipconfig分别查看两台笔记本的ip地址,以下用A电脑做发布者,A电脑搭建代理,B电脑做订阅者。文章中将简称A和B。
A的ip:192.168.5.4 B电脑的ip:192.168.5.2
2. mosquitto
2.1 安装(A和B均安装)
下载mosquitto软件:https://mosquitto.org/download/。默认安装即可
这里我在A、B笔记本均安装。
安装完成后,进入安装目录下,可以看到相关安装目录文件如下:
会用到的文件说明:
mosquitto.exe:可执行文件。用于启动服务端。
mosquitto_pub.exe:可执行文件。用于启动发布者客户端。
mosquitto_sub.exe:可执行文件。用于启动订阅者客户端。
mosquitto.conf:配置文件。
pwfile.example:用户配置文件。用于存放用户的账号和密码。
至此安装完成。
2.2 修改mosquitto.conf配置文件
用记事本打开mosquitto.conf
2.2.1 listener(只在A上配置)
因为此次实验把A作为了代理(服务器),也就是说,A发布的消息将暂时放在A自己搭建的服务器上,因此,listenser只更新了A。
2.2.2 allow_anonymous(只在A电脑上配置)
allow_anonymous false:不允许匿名登录
allow_anonymous true:允许匿名登录
此处为了简单,直接配置成了allow_anonymous true
如果是远程的两台电脑,最好还是配置为false,设置相关密码更加安全。
2.2.3 password_file(只在A电脑上配置)
这里是设置账号和密码的文件位置,生成后默认在mosquitto根目录下。
管理员模式打开Window PowerShell
./mosquitto_passwd -c pwfile.example admin
这里配置了A的账号为admin,密码将会让你输入两次,一次设置,二次确认。
因为在2.2.2章节设置了allow_anonymous true,因此这里设置账号密码并不会影响。但是考虑到远程的设备传消息时的安全性,这里放置配置账号密码的内容。
2.2.4 启动MQTT Broker(A电脑)
切换到mosquitto的根目录,此处我的在D盘下Software\mosquitto
输入代码:
.\mosquitto -c .\mosquitto.conf -v
运行后,可以看到详细的信息:
通过配置文件启动了2.0.15版本的mosquitto,socket与1883的端口绑定。(1883是mosquitt的默认端口)
至此mosquitto部分结束。
3 防火墙开启
因为要让B顺利的从A那里订阅到信息,需要A把特定的端口给B打开。
3.1 开启防火墙
我这里是Window11,打开防火墙和网络保护,选择高级设置
选择入站规则,右边点击新建规则
进入新建入站规则向导,这里选择自定义。下一步。
程序选择所有程序,下一步。
协议和端口,下一步。
作用域这里,添加B的IP地址。下一步。
操作这里,继续下一步。
配置文件将三个都勾选上
最后给起个名称即可。
至此,开通防火墙结束。
3.2 Ping通A和B
检查以下A和B之间的通信。通信正常。
如果ping的时候出现问题,可以通过管理员身份CMD,输入以下命令,开启回显。
netsh firewall set icmpsetting 8
这里Ping的时候,还可以尝试下telnet,进入变黑即成功。
提示:Telnet服务可以通过控制面板—程序—启动或关闭Window功能–勾选Telnet客户端开启。
至此,防火墙和通信部分结束。
4 测试
4.1 开启Broker服务(A电脑)
这里重新开启一下A电脑的MQTT Broker,详细可以见2.2.4章节。
这里我主要考虑因为开通防火墙在开启之后,所以,重新开启一下也好吧。
4.2 订阅(B电脑)
切换mosquitto的根目录,输入代码。
因为上文已经允许了匿名登录,所以这里的账号密码可以不用再输入。
可以看出,订阅后,处于等待状态。其中topic是A和B约定的主题,可以换成任何你们约定的一个主题,比如Test等。
mosquitto_sub -t topic -p 端口号 -h 服务器所在的IP地址 -u 订阅端用户名 -P 订阅端密码
订阅后,在A电脑的MQTT开启的CMD将接收到B的请求。
4.3 发布(A电脑)
切换mosquitto的根目录,输入代码。
mosquitto_pub -t topic -p 端口号 -h mosquitto服务器所在的IP地址 -u 发布端用户名 -P 发布 端密码 -m 发布端要发布的消息
这里发送了Hello。主机为5.4,也就是A,这里A既做了代理,又做了发布者。
回车后,B端收到消息。
至此,MQTT|Windows + mosquitto|同一网段下的两台电脑联调结束。
因为本身对计算机知识不是很清楚,关于防火墙的设置应该查询更详细的资料进行专门的设置,因为防火墙是保护计算机的重要防线了。
其次,本文没有开启MQTT的账号密码验证,因此,后期可以尝试。
通过CMD的简单调通,就可以利用不同编程语言设计更复杂的传输啦。
搞定立刻搞一局DOTA2。
附上本文一些参考链接:
1.MQTT | Windows + mosquitto搭建MQTT Broker(本地服务器)与MQTTX客户端联调
2.用windows命令行在本地局域网搭建mosquitto服务器体验
3.ping不通的解决
4.初步使用MQTT
5.开通防火墙的步骤