MQTT mosquitto + websocktes 的使用 Liunx 环境
来源:互联网 发布:python developer 编辑:程序博客网 时间:2024/06/06 00:21
MQTT mosquitto + websocktes 的使用 Liunx 环境
1.mosquitto 的安装
如果需要 mosquitto 支持websocktes 需要先安装 libwebsockets
libwebsockets 下载地址 https://github.com/warmcat/libwebsockets
mosquitto 下载地址 https://mosquitto.org/download/
1.1 libwebsockets 的安装
a.解压 libwebsockets 包后, 再 当前木目录创建 build 目录 mikdir build
b. cd build 目录 执行 cmake .. 需要 没有安装 cmake 则需要 安装 cmake
c.执行安装 cmake install
d.清除安装临时文件 cmake clean
1.2 mosquitto 的安装
a.解压文件后 vi config.mk 文件
b.修改 WITH_WEBSOCKETS:=yes 必须要 在 安装前设置,否则 不会支持 websocktes
c.编译 make
在编译的过程中 可能 需要 你 安装 openssl, c-ares, libuuid, 库 需要安装 可以通过 yum 安装
yum 的使用就不在着说了 。
d. 执行安装 命令 make install
e.清除 安装临时文件 make clean
1.3 mosquitto.cnof 文件的配置
a.mosquitto 默认使用 mosquitto 用户来 启动 也可以修改 启动用户
b.为mosquitto 添加 websocktes 配置
mosquitto 是支持 多个监听的 需要配置多个监听 就需要 配置多个 listener和protocol
mosquitto 默认的端口的 1883 默认的 protocol 是 mqtt
如要需要同时支持 mqtt 和 websocktes 就需要打开 mosquitto 默认的端口 和 protocol
1.4 启动 mosquitto
我的 mosquitto 安装在 、usr/loacl 下
安装的过程中 在 在etc 目录下 会有 默认的mosquitto.conf 文件
我这里使用的是安装目录下的mosquitto.conf
mosquitto -c /user/loacl/mosquitto/mosquitto.conf &
在启动的过程中可能会 提示 缺少 libmosquittopp.so.1 libwebsockets.so.10 文件
这两个文件 默认安装到 /user/loacl/lib 目录下
如过 你的 系统时 32 位 的 侧需要将 这两个文件 复制到 /usr/lib 目录下
如过 你的 系统时 64 位 的 侧需要将 这两个文件 复制到 /usr/lib64 目录下
1.5 mosquitto 日志的配置
a.mosquitto 默认的日志目录 /var/log/messages or similar
log_dest 默认时 日志则会 打印到 控制台
log_dest 设置为 topic 时 当里则会 以消息的形式 发送到 你 订阅的 系统 主题
mosquitto 的系统主题 都以 $SYS 开头 文档介绍地址 https://mosquitto.org/man/mosquitto-8.html
log_type 日志的类型
2.mosquitto Java端代码
package Test.test.mqtt.mosquitto;import org.eclipse.paho.client.mqttv3.IMqttActionListener;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;import org.eclipse.paho.client.mqttv3.IMqttMessageListener;import org.eclipse.paho.client.mqttv3.IMqttToken;import org.eclipse.paho.client.mqttv3.MqttAsyncClient;import org.eclipse.paho.client.mqttv3.MqttCallback;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.MqttException;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;/** *@author 孙云飞 */public class MqttMessage { private static final String HOST = "tcp://192.168.0.122:1883"; private static final String TOPIC = "$SYS/broker/log/#"; private static final String CLIENTID = "mqttserver"; public static MqttAsyncClient client; public static void init(){ try { client = new MqttAsyncClient(HOST, CLIENTID, new MemoryPersistence()); client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { System.out.println("connectionLost"); } @Override public void messageArrived(String topic, org.eclipse.paho.client.mqttv3.MqttMessage message) throws Exception { System.out.println(message.toString() + "fsdfsfdfsdfsdf"); } @Override public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("deliveryComplete"); } }); client.connect(initOptions(), null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { System.out.println("链接成功!"); try { client.subscribe(TOPIC, 0, new IMqttMessageListener() { @Override public void messageArrived(String topic, org.eclipse.paho.client.mqttv3.MqttMessage message) throws Exception { System.out.println(message.toString()); //System.out.println(client.getPendingDeliveryTokens().length); //char i = 65; //SimpleLogFormatter.left("sdddd", 10, i); } }); } catch (MqttException e) { e.printStackTrace(); } } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { System.out.println("链接失败!"); } }); } catch (MqttException e) { e.printStackTrace(); } } private static MqttConnectOptions initOptions(){ MqttConnectOptions options = new MqttConnectOptions(); options.setAutomaticReconnect(true);//默认重连 options.setCleanSession(false);//清除session options.setConnectionTimeout(60);//超时时间 以秒为单位 options.setKeepAliveInterval(60);//心跳时间 以秒为单位 //options.setWill(TOPIC, "failure".getBytes(), 0, false); //链接失败 则发出一个消息 return options; } public static void main(String[] args) { init(); } public static void send(String[] args) throws MqttPersistenceException, MqttException { MqttMessage.client.publish("service", "1111111".getBytes(), 1, true, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { System.out.println("发送------------------onSuccess"); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { System.out.println("发送------------------onFailure"); } }); }}
3.websocktes 代码 需要 引入 https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js
host = '192.168.0.112'; // hostname or IP addressport = 1884;topic = 'PC'; // topic to subscribe touseTLS = false;username = null;password = null;// username = "jjolie";// password = "aa";cleansession = true;<script type="text/javascript"> var mqtt; var reconnectTimeout = 2000; function MQTTconnect() { mqtt = new Paho.MQTT.Client( "192.168.0.112", 1884, "PC_111"); var options = { timeout: 3, useSSL: useTLS, cleanSession: cleansession, onSuccess: onConnect, onFailure: function (message) { $('#status').val("Connection failed: " + message.errorMessage + "Retrying"); setTimeout(MQTTconnect, reconnectTimeout); } }; mqtt.onConnectionLost = onConnectionLost; mqtt.onMessageArrived = onMessageArrived; if (username != null) { options.userName = username; options.password = password; } console.log("Host="+ host + ", port=" + port + " TLS = " + useTLS + " username=" + username + " password=" + password); mqtt.connect(options); } function onConnect() { $('#status').val('Connected to ' + host + ':' + port); // Connection succeeded; subscribe to our topic mqtt.subscribe(topic, {qos: 0}); $('#topic').val(topic); } function onConnectionLost(response) { setTimeout(MQTTconnect, reconnectTimeout); $('#status').val("connection lost: " + responseObject.errorMessage + ". Reconnecting"); }; function onMessageArrived(message) { var topic = message.destinationName; var payload = message.payloadString; $('#ws').prepend('<li>' + topic + ' = ' + payload + '</li>'); }; function button_onclick(){ //这里写你要执行的语句 var tp = $('#sendtopic').val(); var val = $('#textsend').val(); if(tp==''||val=='') { alert("no aaa"); return; } var message = new Paho.MQTT.Message(val); message.destinationName = tp; message.qos=0; mqtt.send(message);// mqtt.publish(tp, 0, val); $('#ws').prepend('<li>' + tp + ' = ' + val+ '</li>'); }; $(document).ready(function() { MQTTconnect(); }); </script>
- MQTT mosquitto + websocktes 的使用 Liunx 环境
- MQTT协议与mosquitto的安装使用
- mqtt服务端mosquitto的安装和使用
- MQTT--mosquitto使用详解
- MQTT Mosquitto安装和使用
- MQTT初体验mosquitto的安装和使用
- MQTT 初体验——mosquitto 的安装与使用
- MQTT的学习之Mosquitto简要教程(安装&使用)
- MQTT mosquitto的初步学习
- [2] MQTT,mosquitto,Eclipse Paho----mosquitto使用扫盲
- MQTT协议之Mosquitto安装和使用
- 在ubuntu上安装,使用MQTT Mosquitto
- MQTT服务器Mosquitto安装及使用
- mosquitto(mqtt) 认证 登陆(使用redis)
- 在ubuntu上安装,使用MQTT Mosquitto
- mosquitto 调试使用mqtt应用(mqtt调试助手)
- mosquitto-MQTT协议的开源实现
- MQTT初体验mosquitto的java实现
- 自我介绍
- UDT源码分析(1):UDT协议是什么?
- valgrind use
- mysql搭建主从结点
- c++中冒号(:)和双冒号(::)的用法
- MQTT mosquitto + websocktes 的使用 Liunx 环境
- Oracle学习1
- GDB调试命令
- Redis sentinel主从切换环境配置及服务器搭建
- VTK资料大全
- C语言基础-零散知识点总结(三)
- RethinkDB联合创始人分享的44条工程管理经验
- Vector Crypto Unit
- ReactNavite开发——环境搭建