我的Mosquitto代理已启动并在Windows计算机上运行。我不记得我是否在Web Sockets支持下安装了它(因为我不知道那是什么,还是我需要它)。但是现在我的需求是使用JavaScript(Paho)连接到MQTT,我想知道如何为现有的MQTT代理启用Web套接字支持。

我尝试通过添加以下行来编辑mosquitto.conf文件到文件

listener 9001
protocol websockets


,但似乎不起作用。我附加的图像可能会提供更好的图像:



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

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

#1 楼

一些事情:


mosquittto_pubmosquitto_sub命令根本不支持WebSockets。

从命令行运行mosquitto时,您必须明确指向具有-c选项的配置文件

mosquitto -v -c /path/to/mosquitto.conf


可从mosquitto.org下载页面获得的Windows版本不支持WebSockets,因此只有WebSockets可用支持是如果您自己从源代码构建mosquitto并启用它。(从1.5.1版本开始,Windows版本现在包含websocket支持)


评论


这是否意味着javascript将无法与任何pubsub客户端进行通信?而且,通过mosquitto_sub侦听该主题时,由javascript发送给代理(发布)的任何消息都不会收到该消息吗?

– Salim Shamim
17 Mar 12 '17 at 14:39



如果没有WebSockets支持,Paho javascript客户端将完全无法连接到代理,因此它将无法发布或订阅任何主题

– hardillb
17 Mar 12 '17 at 14:50

好的,引用此链接(eclipse.org/paho/clients/js):“Paho JavaScript客户端是使用Javascript编写的基于MQTT浏览器的客户端库,它使用WebSockets连接到MQTT Broker。”以及此blog.ithasu.org/2016/05/…,其中说明了如何在Linux上为Mosquitto启用WebSockets。我不明白为什么这不可能。我很抱歉,可能我只是失去了。

– Salim Shamim
17年3月12日在15:28



已经回答了,Windows的构建没有编译WebSockets。如果需要WebSocket支持,则必须自己构建它。

– hardillb
17 Mar 12 '17 at 15:30

很难听到。我一直在尝试使用各种参考构建Mosquitto的版本,但是我总是被困在某个地方。我也找不到任何具有启用了websocket的mosquitto(Windows托管)二进制文件的人。

–吴宗宪
17-4-28的2:11

#2 楼

正如@hardlib所说,您必须从源代码编译mosquitto。为了使它在Windows上运行,我们花了一些试验和错误,因此在这里提供一些摘要,以防它对某些人有所帮助。请立即进行更正:



先决条件


安装Visual Studio
安装cmake(最新版本很好)
将OpenSSL安装到C:\ temp \ OpenSSL
将pthread解压缩到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并将生成类型设置为释放并按Ctrl + Shift + B



Build mosquitto


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





#3 楼

从1.5.1开始,Windows程序包支持websocket,请参见changelog https://mosquitto.org/blog/
您只需编辑mosquitto.conf文件,通过添加“ protocol websockets”来指定使用websocket协议(请参阅第145行的定义),如果将其作为服务运行,则最终重新启动mosquitto

评论


为Websockt支持添加侦听器9001和协议websocket,并将侦听器1883和协议mqtt使用到允许的默认mqtt流量mosquitto.config

–托马斯
20 Mar 16 '20在8:32



#4 楼

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

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