如何在 Windows 上运行的 Mosquitto 上启用 WebSockets?

物联网 MQTT 蚊子 微软Windows 网络套接字
2021-06-04 01:20:37

我在我的 Windows 机器上启动并运行了一个 Mosquitto 代理。我不记得我是否安装了 Web Sockets 支持(因为我不知道那是什么,或者我是否需要它)。但是现在看到我的要求是使用 JavaScript (Paho)​​ 连接到 MQTT,我想知道如何为我现有的 MQTT 代理启用 Web Socket 支持。

我尝试mosquitto.conf通过将这些行添加到文件中来编辑文件

listener 9001
protocol websockets

但似乎不起作用。我附上一张可能提供更好图片的图片:

Windows 命令提示错误消息和 mosquitto.conf

我也不太确定命令,但它们似乎可以使用默认端口 1883。

所以问题是:我如何使它工作?

4个回答

一些东西:

  1. mosquittto_pubmosquitto_sub命令完全不支持WebSockets的。

  2. 当您从命令行运行 mosquitto 时,您必须使用 -c 选项明确指向配置文件

    mosquitto -v -c /path/to/mosquitto.conf
    
  3. 可从 mosquitto.org 下载页面获得的 Windows 版本不支持 WebSockets,因此您获得 WebSocket 支持的唯一方法是您自己从源代码构建 mosquitto 并启用它。(从 1.5.1 版开始,Windows 版本现在包含网络套接字支持)

正如@hardlib 所说,您必须从源代码编译 mosquitto。我们花了一些试验和错误才能让它在 Windows 上运行,所以这里有一些总结,以防它对某人有帮助。请不要犹豫更正它:

  • 先决条件

    • 安装 Visual Studio
    • 安装 cmake(最新版本很好)
    • 将 OpenSSL 安装到 C:\temp\OpenSSL
    • 将 pthreads 解压到 C:\pthreads
  • 构建 libwebsockets:

    • git clone https://github.com/warmcat/libwebsockets.git 并进入项目的目录
    • 确保您处于稳定提交中,(2.3 是6cf0a981667f0d225a9cf2d7aecfd6f50be6c1fb
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • 在 Visual Studio 中打开 .sln 并将构建类型设置为 release 并按 Ctrl + Shift + B
  • 造蚊子

    • git clone https://github.com/eclipse/mosquitto.git
    • cd mosquitto
    • mkdir build && cd build
    • cmake -G "Visual Studio 15" ..
    • cmake-gui
    • 确保选中 websockets 选项,然后单击生成
    • 打开项目(这里是hacky部分)
    • 将 libwebsockets\lib 和 libwebsockets\build 目录作为附加包含目录添加到 mosquitto 项目的 Release 构建中,并将 libwebsockets\build\lib\Release 添加到链接器的附加库目录中。
    • #define snprintf sprintf_s从 config.h注释掉
    • timespec从 pthreads.h 中注释掉结构体
    • 从 mosquitto_passwd 项目的附加库中删除 optimization.lib 和 debug.lib
    • 添加#include <Windows.h>到 mosquitto_passwd.c 的 win32 ifdef
    • 选择释放模式并按 Ctrl + Shift + B

从 1.5.1 开始,windows 包支持 websocket,请参阅更改日志https://mosquitto.org/blog/ 您只需编辑 mosquitto.conf 文件,通过添加“protocol websockets”指定使用 websocket 协议(请参阅周围的定义145) 并最终重新启动 mosquitto 如果您将其作为服务运行

在 GitHub 上找到了一个带有为 Windows 构建的 WebSockets 的 Mosquitto 编译版本,如果您不想自己构建代码,它可能会有用。

虽然它是用韩语记录的,但如果您不想使用预编译的二进制文件,它还包含一个 PowerPoint 演示文稿,其中包含有关如何自己构建它的说明。