`
yjl49
  • 浏览: 112919 次
社区版块
存档分类
最新评论

手机上的消息推送

 
阅读更多

      最近在找android手机上的消息推送的解决方案。目前看来有以下几种常用的方式:

1.定期查询:按照指定的时间间隔连接服务器查询获取最新的消息。实现起来简单,非实时,查询时间过短则流量耗费多,耗电量大。下面是一个爱立信的测试结果:

battery

 

2.短信方式:需要及时发送消息给客户端时也可以通过这种方式,但大家都懂的,这个很花钱。

 

3.长轮询:基本上与目前很多网站使用的方式一样(WEB阿里旺旺、微博、人人等等)。客户端发起一个很长超时时间的请求,然后服务器端在没有消息的时候阻塞这个请求(一直不给返回值)直到快要超时为止,有消息到来再返回响应。客户端收到响应或超时后立即再发起请求。

这种算是比较好的方式了,消息能够及时地到达客户端。但考虑到移动互联网的特点(网络不稳定、设备内存小)这种方式不能保证重要的消息一定能推送到客户端,另外anroid在手机内存小的情况下可能会杀这个在等待PUSH消息不怎么活动的进程。

 

4.C2DM:GOOGLE提供了消息的PUSH功能,需要和GOOGLE账号绑定,目前看来这种方式在国内是没戏的。

 

5.XMPP:在客户端集成asmack,服务器端使用ejabberd或openfire等开源的XMPP服务器软件也是一种可行的方式。

缺点就是先要有注册、登陆等过程,无线网络环境下连接的效果不怎么样。重要消息的PUSH需要自己实现确认逻辑。

 

6.MQTT:基于代理发布/订阅 模式的消息传输协议,适用于受限环境:

    网络代价昂贵、带宽低、不可靠;

    在嵌入设备中运行、处理器和内存资源有限。

特点是:

   使用发布/订阅模式,解除应用程序耦合;

   对负载内容屏蔽的消息传输;

   使用TCP/IP;

   提供“至多一次”、“至少一次”、“有且仅有一次”三种级别的消息传输;

   小型传输、流量开销少;

   使用LAST WILL 和TESTAMENT特性通知有关各方客户端异常中断机制。

听起来简直就是为移动互联网设计的

 

 

下面是基于MQTT的简单实现方案:

 

服务器:

可以采用IBM的MQTT服务器RSMB;

开源的Mosquitto

 

客户端:

IBM的wmqtt.jar 适用于JAVA客户端。

 

1.下载安装运行Mosquitto服务器。

2.在anroid客户端集成以下代码:

import com.ibm.mqtt.IMqttClient;
import com.ibm.mqtt.MqttClient;
import com.ibm.mqtt.MqttException;
import com.ibm.mqtt.MqttPersistence;
import com.ibm.mqtt.MqttPersistenceException;
import com.ibm.mqtt.MqttSimpleCallback;

public class MQTTConnection implements MqttSimpleCallback{
	IMqttClient mqttClient = null;	
	private static int MQTT_PORT =1883; 
	private static MqttPersistence MQTT_PERSISTENCE=null;
	public static String MQTT_CLIENT_ID ="";
	private static boolean MQTT_CLEAN_START = true;
	private static short MQTT_KEEP_ALIVE = 60 * 15;
	private static int[] MQTT_QUALITIES_OF_SERVICE = { 0 } ;
	private long mStartTime;
		
	public MQTTConnection(String brokerHostName, String initTopic) throws MqttException {
		String mqttConnSpec = "tcp://" + brokerHostName + "@" + MQTT_PORT;
    	// Create the client and connect
    	mqttClient = MqttClient.createMqttClient(mqttConnSpec, MQTT_PERSISTENCE);
    	String clientID = MQTT_CLIENT_ID;
    	mqttClient.connect(clientID, MQTT_CLEAN_START, MQTT_KEEP_ALIVE);

        // register this client app has being able to receive messages
		mqttClient.registerSimpleHandler(this);
		
		// Subscribe to an initial topic, which is combination of client ID and device ID.
		subscribeToTopic(initTopic);

		// Save start time
		mStartTime = System.currentTimeMillis();
		// Star the keep-alives
		//startKeepAlives();			
	}
	
	private void subscribeToTopic(String topicName) throws MqttException {
		
		if ((mqttClient == null) || (mqttClient.isConnected() == false)) {
			// quick sanity check - don't try and subscribe if we don't have
			//  a connection
			System.out.println("subscribe to topic fail");
		} else {									
			String[] topics = { topicName };
			mqttClient.subscribe(topics, MQTT_QUALITIES_OF_SERVICE);
		}
	}	
	
	public void disconnect() {
		try {			
			mqttClient.disconnect();
		} catch (MqttPersistenceException e) {
			System.out.println("disconnection to server error");
		}
	}

	
	@Override
	public void connectionLost() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("connection to server closed");
	}

	@Override
	public void publishArrived(String topicName, byte[] payload, int qos, boolean retained)
			throws Exception {
		// TODO Auto-generated method stub
		String s = new String(payload);
		System.out.println("push message recived :"+s);
	}
}
 

3.运行客户端程序,在命令窗口中使用Mosquitto_pub.exe -q [Qos级别] -t [主题] -m [发布的内容] 进行测试。

 

 

另:Mosquitto由于使用socket select 模型,能支持的客户端连接数量有限。

如果要支持更高并发量,一方面可以考虑采用“策略服务器+Mosquitto集群”的方式,另一方面可以考虑erlang实现的一些MQTT服务器替换Mosquitto(上次见到的一个类似的发布/订阅系统每秒可以完成向40W订阅用户广播的任务,够牛逼了吧)。

 

 

 

 

分享到:
评论
1 楼 Jason_Bourne 2012-08-21  
楼主,请问多个客户端向一个主题发送消息,服务端如何通过这个主题接收呢?我试了下只能收到一个。

相关推荐

    小米推送之消息推送的Demo

    小米推送是一种针对Android应用开发者的消息推送服务,它可以帮助开发者实现向用户设备实时发送消息的功能,提高用户活跃度和应用粘性。小米推送提供了一系列API和SDK,方便开发者集成到自己的应用中。在这个"小米推...

    C#+java手机消息推送源码

    Java在Android平台上占据主导地位,因此Java实现手机消息推送主要是针对Android应用。Google提供了GCM(Google Cloud Messaging)和其后续服务FCM(Firebase Cloud Messaging)作为官方的推送服务。开发者需要在...

    C#后台推送苹果手机消息

    通过以上步骤,我们就可以使用C#在后台成功向苹果手机推送消息。这不仅可以提高用户体验,也能及时传达重要信息,是移动应用开发中的重要一环。然而,要注意遵循Apple的推送通知政策,尊重用户的隐私,避免滥用推送...

    xmpp手机端消息推送

    在手机端消息推送中,XMPP扮演着关键角色,它允许应用程序通过服务器进行双向通信,使得用户即使在后台也能接收到即时消息。Openfire是一个流行的开源XMPP服务器,它提供了强大的实时通讯能力,支持多种平台,包括...

    轻量级消息推送client&server

    在IT行业中,消息推送服务是实现应用程序间实时通信的关键技术,尤其在开发聊天应用时尤为重要。本文将基于“轻量级消息推送client&server”这一主题,深入探讨如何构建一个简单而有效的消息推送系统,主要关注...

    手机端的app推送消息(个推)

    个推,全称为“个推信息科技有限公司”,是中国领先的推送服务提供商,致力于为开发者提供稳定、高效的移动消息推送解决方案。在本文中,我们将深入探讨个推在手机端App推送消息的应用及其相关技术。 首先,个推推...

    push(实现消息推送)

    在IT行业中,消息推送是一项关键的技术,...综上所述,"push(实现消息推送)"项目涵盖了服务器端推送服务的实现和Android客户端的集成,涉及到网络通信、推送协议、消息处理等多个方面,是移动应用开发中的重要技术。

    goEasy消息推送

    GoEasy消息推送是一种高效、便捷的实时通信服务,主要用于实现Web端和手机端的消息推送功能。在现代互联网应用中,实现实时交互是提升用户体验的关键因素之一,而GoEasy则提供了一个简单易用的解决方案。 GoEasy的...

    ASP.NET WEB端消息推送源码

    ASP.NET Web端消息推送技术是构建现代Web应用的关键部分,特别是在实时交互和移动设备支持方面。这个源码包显然提供了一种解决方案,使得开发者能够通过ASP.NET平台向Android和iOS等手机端推送消息。让我们深入了解...

    C#结合unipush的服务端消息推送demo

    在本文中,我们将深入探讨如何使用C#与Unipush服务端进行消息推送,以便为Android应用程序提供实时通知。Unipush,也称为个推,是中国一家提供专业推送服务的公司,其SDK允许开发者轻松地在移动应用中实现消息推送...

    百度云手机消息推送

    ### 百度云手机消息推送知识点详解 #### 一、百度云推送Android_SDK概述 百度云推送Android_SDK是由百度提供的一套完整的开发工具包,旨在帮助开发者轻松集成云推送服务到自己的应用程序中。该SDK通过提供`.jar`包...

    手机消息推送协议

    总的来说,MQTT协议作为手机消息推送的一个标准,为开发者提供了一种有效、可靠的消息传递方式。它特别适用于移动应用、物联网设备以及需要高效率、低资源消耗的消息传输环境。通过掌握MQTT协议的使用,开发者能够为...

    Java 集成华为推送服务 服务端(发送消息)

    在Java开发中,集成华为推送服务是为应用提供消息推送功能的重要步骤,这可以提高用户互动性和应用的活跃度。本篇文章将详细讲解如何在服务端实现华为推送服务的集成,以及如何发送推送消息,同时关注数字角标的自动...

    websocket实现长连接网页消息推送到android手机

    本例子分为客户端(就是android手机),网页端为后台服务器。可以实现网页消息推送到手机,手机也可发消息到网页,很好的实现了消息的同步,不会有延迟,刷新现象。可以实现网页微信,二维码扫描登陆,聊天室等等。

    ECOLOGY9消息推送至企业微信、钉钉配置说明文档

    ### ECOLOGY9消息推送至企业微信、钉钉配置说明 #### 一、配置详解 在ECOLOGY9系统中实现消息推送至企业微信、钉钉的功能时,需要按照以下步骤进行配置: ##### 1. 设置新到达流程(待办流程)推送到企业微信、...

    Android基于mqtt消息推送通知指南

    然而,实现 Android 消息推送通知远比 iPhone 上的推送通知解决方案复杂。Google 提供了 C2DM(Cloud to Device Messaging)服务,但它存在一些问题,如仅适用于 Android 2.2 及以上系统,需要依赖于 Google 官方...

    java实现给Iphone推送消息

    APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...

    消息推送代码示例

    综上所述,这个"消息推送源码"可能涵盖了服务器端监听、消息模型设计、推送服务实现、客户端接收逻辑以及相关的安全性和性能优化等内容。如果你需要进一步深入理解或扩展这个功能,可以从这些方面入手研究代码,逐步...

    xiaomi phone 推送服务端jar.rar

    小米推送服务端jar.rar是一个...总的来说,小米推送服务端jar.rar是开发者实现小米手机上消息推送功能的关键资源,通过合理的集成和使用,开发者可以为用户提供高效、精准的消息推送服务,提升应用的用户体验和活跃度。

    Android手机端小米推送Demo解析和实现方法

    在Android应用开发中,消息推送是一项重要的功能,它能够实现实时地将服务器端的信息传递给用户,提升用户体验。小米推送作为第三方推送平台,以其稳定性和高效性受到了众多开发者的青睐。本文将深入解析Android端...

Global site tag (gtag.js) - Google Analytics