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.编译找不到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
说明:如果安装过程中出现问题,请看六中的解决办法。可能会解决你遇到的问题。
一、安装相应的功能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
相关文章推荐
- MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
- MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
- MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
- MQTT协议之使用Future模式订阅及发布(使用fusesource mqtt-client实现)
- MQTT协议之订阅及发布(使用paho-mqtt-client或mqttv3实现)
- Java for Web学习笔记(九十):消息和集群(5)利用websocket实现订阅和发布(上)
- MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
- RabbitMQ订阅发布的消息,通过WebSocket实现数据实时推送到前端上显
- java连接redis,实现订阅发布遇到的问题
- MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
- RabbitMQ订阅发布的消息,通过WebSocket实现数据实时推送到前端
- MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
- EMQ进程树/MQTT连接/订阅/发布源码流程分析
- MQTT协议之订阅及发布(使用paho-mqtt-client或mqttv3实现)
- MQTT协议之使用Future模式订阅及发布(使用fusesource mqtt-client实现)
- Java for Web学习笔记(九一):消息和集群(6)利用websocket实现订阅和发布(下)
- ActiveMQ+MQTT协议 实现Android推送(根据订阅主题可实现点对点、集群推送)
- 使用四种框架分别实现1百万websocket常连接的服务器
- WebSocket 是什么原理?为什么可以实现持久连接?
- linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能 标签: hiredishiredis异步APIhiredis事件处理redis消息订阅发布redis c接口 2016-