使用mqtt向web里面插入数据_使用Mosquitto测试MQTT Over WebSockets

本文介绍了如何使用Mosquitto在Windows上安装、配置和测试MQTT over WebSockets,以便在Web应用中插入数据。通过修改配置文件启用WebSockets监听,并使用paho-mqtt.js进行连接、订阅和发布测试,确保数据传输的通畅性。
摘要由CSDN通过智能技术生成

01 安装

Mosquitto的下载地址:

https://mosquitto.org/files/binary/win64/mosquitto-1.6.11-install-windows-x64.exe

文件下载后,双击后开始安装。

95657928ede1ec6fabc43f089b425b2e.png

直接Next

bad19f4c4e600c6355f0420d0fee07a9.png

选择需要安装的组件

5263371b2a980495508a757567997d34.png

选择安装目录

e31b2f520d873127fee366d8db7dff51.png

点击Finish,安装完成

02 配置

进入Mosquitto的安装目录,打开 mosquitto.conf 文件。

5b185cb83626b61cb9101e1d196fbedb.png
12e082a6d2c716dfbe2c6fd18a91c051.png

mosquitto.conf 内容截图

  • 找到 Default listener 配置块(第200行),开放port和protocol两个配置项
b65ad44e988240bd1e4090a3cfea88c6.png

去掉蓝色箭头所在行前面的#号即可

  • 找到 Extra listeners 配置块(第358行),添加“listener 9001”、“protocol websockets”两个配置(去掉前面的#号),然后保存。
aca4acc106ae36c70266f50012693379.png

修改前,注意红色箭头两处

b62ede3bf93a00075caf5aa80f64e8be.png

修改后

03 启动

打开CMD命令窗口,切换到Mosquitto安装目录,输入命令“.mosquitto.exe -c .mosquitto.conf”并回车,即可启动。

40906ba797c53b7c16736f84586088de.png

04 连接测试

这里我使用paho-mqtt.js来进行测试,其对应的下载地址是:

https://raw.githubusercontent.com/eclipse/paho.mqtt.javascript/master/src/paho-mqtt.js

下面是具体的测试代码(复制后直接存为.html文件使用),参考https://github.com/eclipse/paho.mqtt.javascript这里我稍微做了点改动。

向World发布消息

用谷歌浏览器打开html文件后,分别在【控制台】和【网络】看到以下信息即代表连接成功。

fb320a1e6dfedc6a864e12f14ced0a2d.png

控制台日志

a38cb3cf5bdf9f3cda69c95d44e04ad0.png

请求为Websocket连接

05 订阅、发布测试

上述的Web客户端连接成功后,订阅了一个名为“World”的主题,这里我开启了另一个MQTT的客户端,同时也订阅“World”主题,并向“World”主题发布一条消息“长江长江,我是黄河”,如果Web客户端能收到此消息,则说明“MQTT Client -> MQTT Broker -> Websocket Client”是通畅的。

fda86ca62617c8ec783808f6fa1565bc.png

使用Eclipse Paho开启的MQTT客户端

5b571a2082093215406f777a1502faf1.png

Web客户端收到消息

同时,在Web客户端同样向“World”主题发送一条消息“”,如果MQTT客户端能收到该消息,则说明“Websocket Client -> MQTT Broker -> MQTT Client”是通畅的。

f80ac1a608b30c1abfa72a2a214ea72a.png

Web客户端发送消息

14616ca311af559442c36dfb1f0bbb23.png

MQTT客户端收到消息

06 总结

Mosquitto1.4.2以后的版本才支持Websocket模式。

所有操作均在WIN10中完成。

在Windows平台下使用C语言向Mosquitto服务器推送JSON数据需要先安装MQTT C客户端库,比如使用Eclipse Paho C库。 下面是一个简单的代码示例,用于将JSON数据发布到Mosquitto服务器: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <MQTTClient.h> #include <cJSON.h> #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientPub" #define TOPIC "test" #define QOS 1 #define TIMEOUT 10000L int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; cJSON *root = NULL; char *payload = NULL; int rc; MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } root = cJSON_CreateObject(); cJSON_AddStringToObject(root, "name", "John"); cJSON_AddStringToObject(root, "surname", "Doe"); cJSON_AddNumberToObject(root, "age", 30); payload = cJSON_Print(root); MQTTClient_message pubmsg = MQTTClient_message_initializer; pubmsg.payload = payload; pubmsg.payloadlen = strlen(payload); pubmsg.qos = QOS; pubmsg.retained = 0; MQTTClient_deliveryToken token; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token); printf("Waiting for up to %d seconds for publication of %s\n" "on topic %s for client with ClientID: %s\n", (int)(TIMEOUT / 1000), payload, TOPIC, CLIENTID); rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); printf("Message with delivery token %d delivered\n", token); cJSON_Delete(root); free(payload); MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } ``` 这个例子使用了两个库:MQTT C客户端库和cJSON库。它首先创建了一个MQTT客户端实例,然后连接到Mosquitto服务器。接下来,它使用cJSON库创建一个JSON对象,将其转换为字符串,然后将其作为消息发布到Mosquitto服务器。最后,它断开了MQTT连接并销毁了客户端实例。 需要注意的是,在使用这个例子之前,需要先安装并配置Mosquitto服务器,并使用正确的地址、客户端ID、主题等参数来运行程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值