MQTT 协议已经非常普及了。我们在程序中使用Mosquittopaho 作为linux 上的MQTT 代理,而客户端使用Paho MQTT库。用起来非常简单,但是有些细节还是值得记录下来。
端口和协议
Mosquittopaho 开放了个端口(1883和9001),端口 1883 使用基于MQTT 的协议,在TCP上接收直接MQTT包。而9001 使用基于MQTT over websocket协议。在Http/websocket 上接收MQTT 包。websocket 适合于浏览器客户端使用。
开放websocket 端口需要在配置文件(mosquitto.conf)中打开。也可以自己定义一个default.conf. 运行时要指定default.conf 文件
mosquitto -c /etc/mosquitto/conf.d/default.conf
mosquitto.conf 和default.conf 文件的内容
listener 1883
protocol mqtt
listener 9001
protocol websockets
使用websocket ,需要在usr/local/lib 中有 libwebsockets.so 共享库,在window wsl 下,发现没有
sudo apt-get update
sudo apt-get install libwebsockets-dev
也遵循网路的内容,打了下面的命令:
ln -s /usr/local/lib/libwebsockets.so.10 /usr/lib/libwebsockets.so.10
结果好了。
Paho MQTT 客户端
javascript 库
在paho 官网:https://projects.eclipse.org/projects/iot.paho/downloads 下载的是paho-mqtt.js和paho-mqtt-min.js 的压缩包。
记住:使用时, paho-mqtt.js 只支持websoket 协议,所以要使用9001 端口。
C 库
我使用的是 C client source 1.3.0 同样在paho 官网上下载。下载之后,编译成了一个静态库libpahomqtt3.c.a. 在src/sample 下由例子,我使用MQTTClient_publish 和MQTTClient_subscribe 两个例程。使用clang 编译。
mqtt app文件目录
mqtt_app
- pahomqtt
libpahomqtt3.c.a
-include
MQTTClient_publish.c
MQTTClient_subscribe.c
编译CMD
结果
浏览器端的MQTT 程序可以和C语言的MQTT 程序相互通信。