MQTT通讯协议简介

WebSphere MQ 遥测传输 (MQTT) 是轻量级基于代理的发布 / 订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如,但不仅限于此:

网络代价昂贵,带宽低、不可靠。
在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:

使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用 TCP/IP 提供网络连接。
有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
IBM 通过对现有移动推送平台比较之后,对其中存在的问题和缺陷做了很好的分析。这些问题集中体现在如下方面:

在网络方面如何适应现有网络的不可靠,很好的保障数据发送可靠性
如何降低网络流量,从而节省网络成本

在移动设备方面如何降低对设备能力的要求,特别是适应计算和存储弱的设备
如何降低对设备电量的消耗,满足设备电源能力的不足

如何降低平台依赖性,真正实现跨移动设备平台

在数据方面缺少对数据安全性的保障,特别是对服务器的掌控
缺少对大量数据的监测,优化

IBM 针对上面问题,结合 MQTT 和 WebSocket,提出了更智慧的移动推送服务解决方案。

[img]http://dl2.iteye.com/upload/attachment/0104/1697/56ee8a9f-8069-339d-9f07-ad074434e8d9.png[/img]

图 1. IBM 移动推送服务解决方案


mosca是一个轻量级的mqtt broker(NodeJS中间件), 安装和使用都很简单:

npm install mqtt -gd

npm install mosca -gd

mosca -v &

mosca启动后, 就可以使用mqtt client发布和订阅消息了:

NodeJS client:

发布消息:

var mqttClient = require(‘mqtt’);
var client = mqttClient.createClient(1883, ’127.0.0.26′); //host与端口
client.publish(‘test/public/topic0′, ‘public topic 0 start’);
client.publish(‘test/private/topic1′, ‘private topic 1 start’);
client.publish(‘test/private/topic2′, ‘private topic 2 start’);




订阅消息:

var mqttClient = require(‘mqtt’);
var client = mqttClient.createClient(1883, ’127.0.0.26′);
//client.subscribe(‘fuck/*’);
client.subscribe(‘test/*’);
client.on(‘message’, function(topic, message){
console.log(topic, message);
});



Java Mqtt client的例子:

package com.snda.apps.odin.talk.client;

import com.ibm.mqtt.MqttClient;
import com.ibm.mqtt.MqttException;
import com.ibm.mqtt.MqttSimpleCallback;

public class MqttClienter {
private final static String CONNECTION_STRING = “tcp://127.0.0.26:1883″;
private final static boolean CLEAN_START = true;
private final static short KEEP_ALIVE = 30;// 低耗网络,但是又需要及时获取数据,心跳30s
private final static String CLIENT_ID = “client1″;
private final static String PUBLISH_TOPICS = “test/public/topic0″;
private final static String[] TOPICS = {“test/private/topic1″, “test/private/topic2″};

private final static int[] QOS_VALUES = { 0, 2 };

private MqttClient mqttClient = null;

public MqttClienter(String i) {
try {
mqttClient = new MqttClient(CONNECTION_STRING);
SimpleCallbackHandler simpleCallbackHandler = new SimpleCallbackHandler();
mqttClient.registerSimpleHandler(simpleCallbackHandler);// 注册接收消息方法
mqttClient.connect(CLIENT_ID + i, CLEAN_START, KEEP_ALIVE);
mqttClient.subscribe(TOPICS, QOS_VALUES);// 订阅接主题
/**
* 完成订阅后,可以增加心跳,保持网络通畅,也可以发布自己的消息
*/
mqttClient.publish(PUBLISH_TOPICS, “Java客户端测试消息Hello World!”.getBytes(), QOS_VALUES[0], true);
} catch (MqttException e) {
e.printStackTrace();
}
}

// 简单回调函数,处理client接收到的主题消息
class SimpleCallbackHandler implements MqttSimpleCallback {
/**
* 当客户机和broker意外断开时触发 可以再此处理重新订阅
*/
public void connectionLost() throws Exception {
System.out.println(“客户机和broker已经断开”);
}

/**
* 客户端订阅消息后,该方法负责回调接收处理消息
*/
public void publishArrived(String topicName, byte[] payload, int Qos,
boolean retained) throws Exception {
System.out.println(“订阅主题: ” + topicName);
System.out.println(“消息数据: ” + new String(payload));
System.out.println(“消息级别(0,1,2): ” + Qos);
System.out.println(“是否是实时发送的消息(false=实时,true=服务器上保留的最后消息): ” + retained);
}
}

public static void main(String[] args) {
new MqttClienter(“” + 1);
}
}


此协议可以用于移动APP的消息发布,即时通讯等应用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MQTT通信协议是一种轻量级消息传输协议。它最初是为传输物联网应用中的数据而设计的,但也适用于其他各种应用场景。MQTT通信协议中,消息传输的主要方式是发布/订阅模式,即消息发布者将消息发布到主题(Topic)中,消息订阅者可以从该主题中接收消息。此外,MQTT协议还支持点对点的消息传输方式。 而JSON(JavaScript Object Notation)是一种轻量级数据交换格式。它被广泛应用于Web应用程序中,在互联网领域也具有极高的使用率和影响力。JSON格式的数据具有易读、易解析、易扩展的特点,非常适合于数据交互。 在MQTT通信协议中,JSON格式常用于消息的序列化和反序列化。将消息内容序列化为JSON格式可以使其更易于传输和解析。消息订阅者接收到消息后,可以通过将JSON格式的消息反序列化为对象或文本,来获取其中所包含的数据。在实际应用中,由于JSON格式的数据易于处理和解析,因此大量使用了JSON格式的消息传输方式。 总的来说,MQTT通信协议和JSON数据交换格式都具有轻量级、易于传输和解析的特点,在物联网等领域中得到广泛应用。两者可以相互结合使用,实现高效、可靠的数据传输和交换。 ### 回答2: MQTT (Message Queuing Telemetry Transport)是一种轻量级的基于发布/订阅模式的消息传输协议。它主要用于物联网设备、传感器、移动应用等场景下的通信。 MQTT协议的消息格式可支持JSON数据格式,JSON是一种轻量级的数据交换格式。JSON格式简洁、易于理解和维护,非常适合在Web应用中传输数据。在MQTT协议中使用JSON格式可以使得消息的解析和处理更为方便和高效。MQTT使用JSON格式传输消息时需要在消息中指定content-type为application/json。 在使用MQTT协议传输JSON数据时,通信双方需要定义JSON数据格式和各个字段的含义,以确保在收发消息时能够正确解析并处理数据。除此之外,JSON格式还可以进行数据压缩和加密,以提高数据传输的效率和安全性。 总之,MQTT通信协议与JSON数据格式相结合可以为物联网设备、传感器、移动应用等场景下的通信提供高效、灵活和安全的解决方案。 ### 回答3: MQTT通信协议是应用层的一种机器对机器(M2M)的通信协议,其核心思想是轻量级、可靠、易于实现。MQTT协议允许客户端通过中间代理(broker)来进行消息传递,彻底解耦了发布者和订阅者之间的通信,同时避免了频繁的连接和断开。 JSON是一种轻量级的文本格式,可以用于构建Web服务、传输数据等。JSON消息的格式紧凑,性能高,易于实现,且可以在各种应用程序、编程语言之间轻松进行交互或者传递消息。 MQTT和JSON结合使用,可以使得MQTT的应用更加灵活和通用。MQTT协议传递的消息可以使用JSON进行编码和解码,这样可以使得消息更加易于阅读和理解。同时,使用JSON编码的消息可以支持嵌套结构和复杂数据类型,提高了通信数据的表现力和灵活性。 总之,MQTT和JSON的结合,可以使得通信协议更加灵活、通用、易于实现和理解,在实际的应用场景中得到广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值