采用MQTT协议实现android消息推送
2013-09-02 14:01
766 查看
MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如,但不仅限于此:
网络代价昂贵,带宽低、不可靠。
在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用TCP/IP提供网络连接。
有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
使用LastWill和Testament特性通知有关各方客户端异常中断的机制
MQTT最简单的使用包括两种,一种是发消息,一种是订阅消息。
发消息就是向一个固定IP地址的某个主题发送消息(publish)
订阅消息是向服务器端订阅某些主题,当其他客户端向服务器的这个主题广播消息时,那么所有订阅这个主题的客户端就都能收到了
MQTT是一项消息传递技术,由IBM再2001年发布。
总结一下,机制就是使用一个代理服务器messagebroker,
客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息,
同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。
只要手机客户端,连上服务器,然后就可以接收和发布消息了,不用自己写socket什么了,
低带宽,低耗电量,代码量也少,很简单吧。
来自:http://www.open-open.com/lib/view/open1352431806309.html
网络代价昂贵,带宽低、不可靠。
在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用TCP/IP提供网络连接。
有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
使用LastWill和Testament特性通知有关各方客户端异常中断的机制
MQTT最简单的使用包括两种,一种是发消息,一种是订阅消息。
发消息就是向一个固定IP地址的某个主题发送消息(publish)
订阅消息是向服务器端订阅某些主题,当其他客户端向服务器的这个主题广播消息时,那么所有订阅这个主题的客户端就都能收到了
MQTT是一项消息传递技术,由IBM再2001年发布。
总结一下,机制就是使用一个代理服务器messagebroker,
客户端client连接上这个服务器,然后告诉服务器说,我可以接收哪些类型的消息,
同时,client也可以发布自己的消息,这些消息根据协议的内容,可以被其他client获取。
只要手机客户端,连上服务器,然后就可以接收和发布消息了,不用自己写socket什么了,
低带宽,低耗电量,代码量也少,很简单吧。
package com.pig.test.mqtt; |
002 |
003 | import com.ibm.mqtt.MqttClient; |
004 | import com.ibm.mqtt.MqttException; |
005 | import com.ibm.mqtt.MqttSimpleCallback; |
006 |
007 | public class SubscribeClient { |
008 | private final static String "tcp://192.168.1.60:1883" ; |
009 | private final static boolean CLEAN_START true ; |
010 | private final static short KEEP_ALIVE 30 ; //低耗网络,但是又需要及时获取数据,心跳30s |
011 | private final static String "client1" ; |
012 | private final static String[] |
013 | "Test/TestTopics/Topic1" , |
014 | "Test/TestTopics/Topic2" , |
015 | "Test/TestTopics/Topic3" , |
016 | "tokudu/client1" |
017 | }; |
018 | private final static int [] 0 , 0 , 2 , 0 }; |
019 |
020 | ////////////////// |
021 | private MqttClient null ; |
022 |
023 | public SubscribeClient(String i){ |
024 | try { |
025 | mqttClient new MqttClient(CONNECTION_STRING); |
026 | SimpleCallbackHandler new SimpleCallbackHandler(); |
027 | mqttClient.registerSimpleHandler(simpleCallbackHandler); //注册接收消息方法 |
028 | mqttClient.connect(CLIENT_ID+i, |
029 | mqttClient.subscribe(TOPICS, QOS_VALUES); //订阅接主题 |
030 |
031 | /** |
032 | * 完成订阅后,可以增加心跳,保持网络通畅,也可以发布自己的消息 |
033 | */ |
034 |
035 | mqttClient.publish(PUBLISH_TOPICS, "keepalive" .getBytes(), QOS_VALUES[ 0 ], true ); |
036 |
037 | } catch (MqttException |
038 | // |
039 | e.printStackTrace(); |
040 | } |
041 | } |
042 |
043 | /** |
044 | * 简单回调函数,处理client接收到的主题消息 |
045 | * |
046 | * |
047 | */ |
048 | class SimpleCallbackHandler implements MqttSimpleCallback{ |
049 |
050 | /** |
051 | * 当客户机和broker意外断开时触发 |
052 | * 可以再此处理重新订阅 |
053 | */ |
054 | @Override |
055 | public void connectionLost() throws Exception { |
056 | // |
057 | System.out.println( "客户机和broker已经断开" ); |
058 | } |
059 |
060 | /** |
061 | * 客户端订阅消息后,该方法负责回调接收处理消息 |
062 | */ |
063 | @Override |
064 | public void publishArrived(String byte [] int Qos, boolean retained) throws Exception { |
065 | // |
066 | System.out.println( "订阅主题: " + topicName); |
067 | System.out.println( "消息数据: " + new String(payload)); |
068 | System.out.println( "消息级别(0,1,2): " + Qos); |
069 | System.out.println( "是否是实时发送的消息(false=实时,true=服务器上保留的最后消息): " + retained); |
070 | } |
071 |
072 | } |
073 |
074 | /** |
075 | * 高级回调 |
076 | * |
077 | * |
078 | */ |
079 | class AdvancedCallbackHandler implements MqttSimpleCallback{ |
080 |
081 | @Override |
082 | public void connectionLost() throws Exception { |
083 | // |
084 |
085 | } |
086 |
087 | @Override |
088 | public void publishArrived(String byte [] int arg2, |
089 | boolean arg3) throws Exception { |
090 | // |
091 |
092 | } |
093 |
094 | } |
095 |
096 | /** |
097 | * |
098 | */ |
099 | public static void main(String[] |
100 | // |
101 | new SubscribeClient( "" + i); |
102 |
103 | } |
104 |
105 | } |
相关文章推荐
- 如何采用MQTT协议实现android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- Android推送通知的实现--采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送1
- 采用MQTT协议实现Android消息推送
- android + PHP 实现消息推送(采用MQTT协议)
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- (转)采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- Android推送通知的实现--采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- 采用MQTT协议实现Android消息推送
- Android消息推送(二)--基于MQTT协议实现的推送功能