文档章节

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

小儿
 小儿
发布于 2017/08/22 08:42
字数 785
阅读 482
收藏 0

环境: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

© 著作权归作者所有

小儿
粉丝 3
博文 114
码字总数 62731
作品 0
海淀
程序员
私信 提问
MqttWk 1.0.0-netty 发布,Java MQTT服务及消息代理

MqttWk by netty 基于 nutzboot + netty + redis + kafka 实现的MQTT服务broker(另有t-io版本分支,暂未发布) 本项目代码主要来源于 netty/iot-mqtt-server 等众多项目,开源免费,欢迎交流...

Wizzer
2018/07/31
1K
4
基于 NutzBoot + t-io 的 MQTT Broker - MqttWk

MqttWk 基于 nutzboot + t-io + redis + kafka 实现的MQTT服务broker 本项目代码主要来源于 netty/t-io/iot-mqtt-server 等众多项目,开源免费,欢迎交流学习 参考项目 https://github.com/n...

Wizzer
2018/07/20
0
0
Mr.Wang/iot-mqtt-server

iot-mqtt-server 项目介绍 轻量级物联网MQTT服务器, 快速部署, 支持集群. 软件架构说明 基于netty+springboot+ignite技术栈实现 使用netty实现通信及协议解析 使用springboot提供依赖注入及属...

Mr.Wang
2018/07/13
0
0
补习系列(20)-大话 WebSocket 与 "尬聊"的实现

[TOC] 一、聊聊 WebSocket 从HTML5技术流行至今,WebSocket已经有非常广泛的应用: 在线游戏,提供实时的操作交互体验 社交平台,与好友实时的私信对话 新闻动态,获得感兴趣的主题信息推送 ...

美码师
05/03
0
0
emqttd 0.10.0 发布,Erlang集群MQTT消息服务器

emqttd 0.10.0-beta版本正式发布,支持Web管理控制台、MySQL/PostgreSQL认证鉴权。 Web管理控制台(Web Dashboard) 1. Erlang虚拟机的CPU、内存、进程数量、文件句柄监控 2. 消息服务器节点名...

emqtt
2015/08/20
3K
7

没有更多内容

加载失败,请刷新页面

加载更多

基础工具类

package com.atguigu.util;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid......

architect刘源源
今天
43
0
P30 Pro劲敌!DxO官宣新机:排行榜又要变

5月26日晚间,DxOMark官方推特预告,将在5月27日公布一款新机型的DxOMark评分,猜猜是哪款? 网友猜想的机型有:红米K20、谷歌Pixel 3a、索尼Xperia 1、诺基亚9 PureView等。 DxOMark即将公布...

linux-tao
昨天
15
0
Ubuntu18.04.2窗口过小不能自适应(二次转载)

解决Ubuntu在虚拟机窗口不能自适应 2018年09月06日 16:20:08 起不了名儿 阅读数 855 此博文转载:https://blog.csdn.net/nuddlle/article/details/77994080(原地址) 试了很多办法这个好用 ...

tahiti_aa
昨天
2
0
死磕 java同步系列之CountDownLatch源码解析

问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以...

彤哥读源码
昨天
6
0
Nginx提供下载apk服务

有时候我们可能需要提供文件或者其他apk下载链接,通过 nginx 配置可以很简单地实现。 server {    listen 80;    server_name download.xxx.com;    root app;    locati...

Jack088
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部