您的位置:首页 > 编程语言 > Qt开发

websocket连接mqtt实现发布及订阅主题

2017-08-22 00:00 344 查看
环境:linux(ubuntu、Centos7),websocket,mosquitto-1.4.10,libwebsockets-master

说明:如果安装过程中出现问题,请看六中的解决办法。可能会解决你遇到的问题。

一、安装相应的功能libwebsockets

1.下载libwebsockets,下载地址https://libwebsockets.org/

2.解压,我下载的是zip的,利用xftp上传到服务器上面的。

3.进入目录 cd libwebsockets-master

4.创建一个build文件夹 mkdir build

5.进入build cd build

6.安装如果希望使用64位库文件,添加参数如下cmake .. -DLIB_SUFFIX=64

7.编译make

8. 安装make install

二、安装mqtt服务器

1.选择对应的版本下载mqtt服务器,下载地址http://mosquitto.org/files/source/

2.解压 tar zxfvmosquitto-1.4.10.tar.gz

3.进入目录 cd mosquitto-1.4.10

4.配置文件 vim config.mk (WITH_WEBSOCKETS:=yes)

5.编译make

6.安装make install

三、配置mqtt服务器

1.找到/etc/mosquitto/mosquitto.conf,如果没有该文件则进入你安装的mosquitto位置执行 cp mosquitto.conf /etc/mosquitto/mosquitto.conf

2.编辑mosquitto.conf vim mosquitto.conf

3.在Default Listenter 添加一下内容

port 1883

listener 19211

protocol websockets

注意:这里19211是websocket连接端口

4.运行 mosquitto -c /etc/mosquitto/mosquitto.conf (这里一定运行这个,不然websocket连接不上mqtt服务器。)

四、测试mqtt服务器

1.启动mqtt服务器 mosquitto -v

2.订阅主题 mosquitto_sub -v -t 主题名

3.发布消息 mosquitto_pub -t 主题名 -m 消息内容

如果订阅主题的客户端收到发布的消息,则说明成功。

五、websocket连接mqtt服务器 jsAPI文档: https://www.eclipse.org/paho/clients/js/
1.引入<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js" type="text/javascript"></script>

2. // 创建client

client = new Paho.MQTT.Client(location.hostname, Number(location.port), "clientId");

// 设置回调

client.onConnectionLost = onConnectionLost;

client.onMessageArrived = onMessageArrived;

// 连接mqtt服务器

client.connect({onSuccess:onConnect});

//回调方法

function onConnect() {

console.log("onConnect");

//订阅主图

client.subscribe("World");

//发布消息

message = new Paho.MQTT.Message("Hello");

message.destinationName = "World";

client.send(message);

}

// 连接失败的回调

function onConnectionLost(responseObject) {

if (responseObject.errorCode !== 0) {

console.log("onConnectionLost:"+responseObject.errorMessage);

}

}

// 接收到消息的回调

function onMessageArrived(message) {

console.log("onMessageArrived:"+message.payloadString);

}

六、遇到的问题

1.编译找不到cmake

解决办法:安装cmake

sudo apt-get install libssl-dev

2.error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

解决办法:

# 创建链接

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

# 更新动态链接库

sudo ldconfig

3.编译找不到openssl/ssl.h

解决办法:安装openssl

sudo apt-get install libssl-dev

4.编译过程找不到ares.h

解决办法:sudo apt-get install libc-ares-dev

5.编译过程找不到uuid/uuid.h

sudo apt-get install uuid-dev

6.最后启动了,就是远程连接不上,考虑是防火墙的问题

关闭防火墙systemctl stop firewalld.service

具体的解决办法我猜测应该是配置防火墙,配置开放端口,而不是关闭防火墙,这个方法我还没来的及验证。

7.error while loading shared libraries: libwebsockets.so.9: cannot open shared object file: No such file or directory

解决办法:sudo ln -s /usr/local/lib64/libwebsockets.so.9 /usr/lib/libwebsockets.so.9

sudo ldconfig

8.websocket连接报错Failed to connect: AMQJS0007E Socket error:undefined.

如果配置的websocket正常启动成功,问题可能出现在SSL上面。

解决方法:关闭ssl的支持

卸载mqtt:make uninstall

配置config.mk WITH_TLS:=no WITH_TLS_PSK:=no

安装 make install
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐