25. 钛极OS之MQTT

钛极OS之MQTT

 

  

  MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务,详细请参考:https://en.wikipedia.org/wiki/MQTT 或 mqtt.org 了解更多信息。

  目前主流的物联云厂商均支持MQTT, 如Amazon, 百度云,阿里云等等, TiJOS 提供符合MQTT 3.1.1标准协议的MQTT Client, 可与所有支持MQTT 协议的服务器直接连接, 如百度物联云及阿里物联云。

 

  Java包

  tijos.framework.networkcenter.mqtt

  TiJOS MQTT Client 包括如下类:

 

类名说明
MqttClientMqtt客户端
MqttConnectOptionsMqtt连接项设置
MqttClientListenerMqtt消息监听接口
MqttExceptionMqtt异常


  TiJOS MQTT Client 支持TCP和SSL两种通讯方式, 符合MQTT3.1.1标准规范,支持QOS0,1,2, 支持高性能异步API, 在处理MQTT协议过程中通过事件回调返回操作结果, 可支持突发模式"burst-mode"客户端请求, 实现快速发布无等待, 避免客户端资源等待。

  MQTT 连接配置

  MQTT 连接配置通过MqttConnectOptions 类进行,可进行如下配置:

 

配置项MqttConnectOptions说明
CleanSessionsetCleanSession(boolean)设置 Client断开连接后Server是否应该保存Client的订阅信息
UserNamesetUserName(String)用户名
PasswordsetPassword(String)密码
LWTsetWill(String, byte[], int, boolean)"Last Will and Testament" (LWT), 具体请参考MQTT协议
KeepAliveIntervalsetKeepAliveInterval(int)设置客户端与服务器之间最大空闲时间,以秒为单位,默认60秒
ConnectionTimeoutsetConnectionTimeout(int)客户连接服务器超时设置,秒为单位,默认10秒
AutomaticReconnectsetAutomaticReconnect(boolean)设置是否自动重新连接


  MQTT服务器地址及客户端ClientID通过MqttClient初始化时进行设置。

  MQTT 连接建立步骤
  • 通过MqttConnectOptions设置相应的连接参数:

    1. <font size="3">MqttConnectOptions connOpts = new MqttConnectOptions();
    2. connOpts.setUserName(username);
    3. connOpts.setPassword(password);
    4. connOpts.setAutomaticReconnect(true);</font>
    复制代码
  • 设置MQTT服务器地址及ClientID, 以百度物联云服务器为例:

    1. <font size="3">final String broker = "tcp://tijos.mqtt.iot.gz.baidubce.com:1883";
    2. final String clientId = "mqtt_test_java_client1";
    3.  
    4. MqttClient mqttClient = new MqttClient(broker, clientId);</font>
    复制代码
  • 设置事件监听并连接服务器

    1. <font size="3">mqttClient.SetMqttClientListener(new MqttEventLister());
    2. mqttClient.connect(connOpts, mqttClient);</font>
    复制代码
  • 连接成功或失败时会通过MqttClientListener中onMqttConnectSuccess或onMqttConnectFailure返回, 用户也可以不使用突发模式直接进行topic的发布和订阅以提高性能。

  MQTT 客户端通过异步事件的方式处理MQTT连接和断开响应, 消息调用过程如下:
  • 事件connectComplete和connectionLost在网络TCP连接成功或断开时调用,如果设置了自动连接,当网络断开时MQTT Client会自动重新连接MQTT Server

  • onMqttConnectSuccess和onMqttConnectFailure在MQTT 连接成功或失败时调用,

  MQTT 事件监听

  MQTT的通过IMqttClientListener事件回调来处理事件,事件类型包括:

 

事件说明
connectComplete(Object, boolean)当网络连接成功或重新连接成功时调用
connectionLost(Object)当网络断开或连接失败时调用
onMqttConnectSuccess(Object )当MQTT CONNECT消息返回成功时调用,意味着MQTT SERVER接受该连接
onMqttConnectFailure(Object, int )当MQTT CONNECT消息返回失败时调用,意味着MQTT SERVER不接受该连接, 具体原因可通过第二个参数获得
messageArrived(Object, String, byte[])当服务器端发送topic更新时调用
publishCompleted(Object, int, String, int)当客户端PUBLISH成功后调用
subscribeCompleted(Object, int, String, int)当客户端SUBSCRIBE成功后调用
unsubscribeCompleted(Object, int, String, int)当客户端UNSUBSCRIBE成功时

  MQTT Topic 发布和订阅

  MQTT协议主要来进行topic的发布和订阅,即将数据发布到服务器和从服务器获得最数据更新,这主要通过MqttClient的publish和subscribe函数来完成:

 

  1. <font size="3">String topic = "topic2";
  2. String content = "Message from MQTT IoT demo";
  3. int Qos = 1;
  4. boolean retain = false;
  5.  
  6. int msgId = mqttClient.subscribe(topic, Qos);
  7. msgId = mqttClient.publish(topic, content.getBytes(), Qos, retain);</font>
复制代码

 

  publish和subscribe 返回msgId 用于标识本次操作,当操作完成后的事件回调中可通过msgId或topic名称来获得当前事件的执行结果。

  注意:

  • 有些物联云服务器仅支持QOS0和1 的发布和订阅, 不支持QOS2.

  • TiJOS MQTT发布订阅最大支持512字节数据, 超出部分将被抛弃


 更多详细介绍请见钛云物联官网:www.tijos.net
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Socket.IO是一个基于事件驱动的实时通信库,它可以在浏览器和服务器之间建立双向通信。而MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,常用于物联网设备之间的通信。 要在Socket.IO中连接MQTT,可以使用一个中间件库,例如`socket.io-mqtt`。这个库可以将Socket.IO和MQTT进行桥接,使得可以通过Socket.IO来发送和接收MQTT消息。 下面是一个简单的示例代码,展示了如何使用`socket.io-mqtt`连接MQTT: 1. 首先,安装`socket.io-mqtt`库: ``` npm install socket.io-mqtt ``` 2. 在服务器端,创建一个Socket.IO服务器,并使用`socket.io-mqtt`中间件来连接MQTT: ```javascript const express = require('express'); const app = express(); const server = require('http').createServer(app); const io = require('socket.io')(server); const mqtt = require('mqtt'); const mqttClient = mqtt.connect('mqtt://localhost'); // 这里的地址需要根据实际情况修改 const socketioMqtt = require('socket.io-mqtt'); io.use(socketioMqtt(mqttClient)); io.on('connection', (socket) => { console.log('A client connected'); // 监听来自客户端的MQTT消息 socket.on('mqtt', (topic, message) => { console.log(`Received MQTT message on topic ${topic}: ${message}`); }); // 发布MQTT消息到指定主题 socket.emit('mqtt', 'myTopic', 'Hello MQTT'); }); server.listen(3000, () => { console.log('Server listening on port 3000'); }); ``` 3. 在客户端,使用Socket.IO连接到服务器,并发送和接收MQTT消息: ```javascript const socket = io('http://localhost:3000'); // 这里的地址需要根据实际情况修改 // 发送MQTT消息到服务器 socket.emit('mqtt', 'myTopic', 'Hello MQTT'); // 监听来自服务器的MQTT消息 socket.on('mqtt', (topic, message) => { console.log(`Received MQTT message on topic ${topic}: ${message}`); }); ``` 这样,通过Socket.IO和`socket.io-mqtt`中间件,就可以在浏览器和服务器之间建立起MQTT通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值