关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池;SMS(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是很难找到免费的网关来发送短信;最后就是持久连接,主要是Socket通讯,这个解决了性能问题,但是耗电问题依旧没能解决。
在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较成熟的及时消息传递协议共有四种,而无疑最为主流就是XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。在网上可以找到很多的XMPP资料,这里就不在赘述了,不然越扯越多。总之,XMPP主要显著的优点主要有以下几个方面:
1、 分布式 任何人都可以运行自己的XMPP服务器,它没有主服务器
2、 安全性很高。使用SASL及TLS等技术的可靠安全性
3、 开发性 它是开源的,易于进行学习和了解
4、 跨平台 毋庸置疑,使用的XML进行传输的
说完优点,我们言归正传,基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。而如果把它直接用在Android上是不行的,因为android缺少了一些java的类库,于是一个改进版的asmack诞生了,它是专门为android而改进的android smack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是android push notification,简称androidpn。
Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不得不提到XMPP的具体细节。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提到的信息发送到服务器端,怎么发送消息的呢?以<stream>根节点的方式开始传递,只有在服务器和客户端关闭的时候才会发送它的结束标记</stream>。客户端通过XMPP协议只用做的就是接收消息,而所有其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。那么客户端和服务器端的消息回应是如何实现的?如要通过一个ID来标识,具体细节可以去查看XMPP协议。
一旦注册绑定后,服务器端就和客户端建立了连接,客户端只用负责去接收消息。所以当我们应用Androidpn的时候,客户端会非常的简单。而在服务器端,Androidpn又做了什么呢?
服务器端的展示方面,androidpn主要用到的技术是Spring和Hibernate。主要是用来展示用户状态和发送信息用的,如下图:
这方面的技术已经比较成熟,就不再细说了,主要要说的还是XMPP的管理。在服务器端的源码中一个org.androidpn.server.xmpp.net.Connection类,主要是代表一个服务器上的XMPP连接,注意只是一个,它可以确保在服务器关闭的时候,发送一个</stream>标记到客户端,告知连接断开,需重新连接。
org.androidpn.server.xmpp.session.SessionManager主要用户管理所有会话,比如连接断开,删除session以及建立连接,添加session等等。
而在管理Socket连接的时候,androidpn采用了MINA框架来进行管理,MINA的优点就是改变了我们传统的管理socket的方式,比如没建立一个socket开一个线程,而MINA可以实现多个线程管理N多个用户。在处理高并发的推送上无疑是有巨大的好处的。
合理的利用监听器来管理session,也是androidpn的优点。在安全性方面,制定了TLS(安全传输层)策略,并却采用了安全认证,这些方面都做的不错。
当然,不可避免的30秒钟的心跳包还是必不可少的。
总之,用Androidpn好处有以下方面:采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议);良好的框架支持(专门为android 而产生的推送框架asmack,以及很好的管理socket的框架MINA,都是很成熟的产品);完全开放的源代码(我们可以在androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代码,降低了android的开发难度。缺点不言而喻,使用了太多的框架,如果想要改一些具体的实现,可能会迁移发动全身。不过如果你个懒人的话,完全满足你的需求了。
最后是我整理的androidpn的源码,完全可以使用。原来的服务器端用的jetty框架来代替tomcat的,我把它又重新整合到了tomcat下,可以完美的和你的服务器端融合。懒人们,来吧~~由于文件过大,所以用了外连~~喜欢的就去下载吧。。只需要改下client的raw文件夹下的ip地址就可以运行。。androidpn下载地址
在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较成熟的及时消息传递协议共有四种,而无疑最为主流就是XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。在网上可以找到很多的XMPP资料,这里就不在赘述了,不然越扯越多。总之,XMPP主要显著的优点主要有以下几个方面:
1、 分布式 任何人都可以运行自己的XMPP服务器,它没有主服务器
2、 安全性很高。使用SASL及TLS等技术的可靠安全性
3、 开发性 它是开源的,易于进行学习和了解
4、 跨平台 毋庸置疑,使用的XML进行传输的
说完优点,我们言归正传,基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。而如果把它直接用在Android上是不行的,因为android缺少了一些java的类库,于是一个改进版的asmack诞生了,它是专门为android而改进的android smack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是android push notification,简称androidpn。
Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不得不提到XMPP的具体细节。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提到的信息发送到服务器端,怎么发送消息的呢?以<stream>根节点的方式开始传递,只有在服务器和客户端关闭的时候才会发送它的结束标记</stream>。客户端通过XMPP协议只用做的就是接收消息,而所有其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。那么客户端和服务器端的消息回应是如何实现的?如要通过一个ID来标识,具体细节可以去查看XMPP协议。
一旦注册绑定后,服务器端就和客户端建立了连接,客户端只用负责去接收消息。所以当我们应用Androidpn的时候,客户端会非常的简单。而在服务器端,Androidpn又做了什么呢?
服务器端的展示方面,androidpn主要用到的技术是Spring和Hibernate。主要是用来展示用户状态和发送信息用的,如下图:
这方面的技术已经比较成熟,就不再细说了,主要要说的还是XMPP的管理。在服务器端的源码中一个org.androidpn.server.xmpp.net.Connection类,主要是代表一个服务器上的XMPP连接,注意只是一个,它可以确保在服务器关闭的时候,发送一个</stream>标记到客户端,告知连接断开,需重新连接。
org.androidpn.server.xmpp.session.SessionManager主要用户管理所有会话,比如连接断开,删除session以及建立连接,添加session等等。
而在管理Socket连接的时候,androidpn采用了MINA框架来进行管理,MINA的优点就是改变了我们传统的管理socket的方式,比如没建立一个socket开一个线程,而MINA可以实现多个线程管理N多个用户。在处理高并发的推送上无疑是有巨大的好处的。
合理的利用监听器来管理session,也是androidpn的优点。在安全性方面,制定了TLS(安全传输层)策略,并却采用了安全认证,这些方面都做的不错。
当然,不可避免的30秒钟的心跳包还是必不可少的。
总之,用Androidpn好处有以下方面:采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议);良好的框架支持(专门为android 而产生的推送框架asmack,以及很好的管理socket的框架MINA,都是很成熟的产品);完全开放的源代码(我们可以在androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代码,降低了android的开发难度。缺点不言而喻,使用了太多的框架,如果想要改一些具体的实现,可能会迁移发动全身。不过如果你个懒人的话,完全满足你的需求了。
最后是我整理的androidpn的源码,完全可以使用。原来的服务器端用的jetty框架来代替tomcat的,我把它又重新整合到了tomcat下,可以完美的和你的服务器端融合。懒人们,来吧~~由于文件过大,所以用了外连~~喜欢的就去下载吧。。只需要改下client的raw文件夹下的ip地址就可以运行。。androidpn下载地址
发表评论
-
代码混淆
2013-05-18 14:31 867代码混淆: http://wenku.baidu.com/ ... -
apk签名方法
2012-12-17 14:36 867签名证书,方式相同包名的不同apk互相覆盖安装。 1. ... -
Ubuntu安装Android开发环境
2012-11-17 00:38 17141、JDK安装 在下载JDK,官网地址为:http://ww ... -
Android之完美退出所有activity方法
2012-07-10 18:52 1070/*还有一种比较流行的Android经典完美退出方法,使用单例 ... -
android 焦点问题
2012-06-04 12:31 4053参考地址:http://blog.csdn.net/zhang ... -
Android报表工具
2012-05-11 16:11 1409Android报表工具下载地址:http://code.goo ... -
HttpClient 教程 (六)
2012-03-21 13:26 833HttpClient 教程 (六) 第六章 高级主题 6.1 ... -
HttpClient 教程 (五)
2012-03-21 13:26 904第五章 HTTP客户端服务 5.1 HttpClient门 ... -
HttpClient 教程 (四)
2012-03-21 13:26 1063第四章 HTTP认证 HttpClient ... -
HttpClient 教程 (三)
2012-03-21 13:26 1268HttpClient 教程 (三) 第三章 HTTP状态管理 ... -
HttpClient 教程 (二)
2012-03-20 15:48 1065HttpClient 教程 (二) 第二章 连接管理 Htt ... -
HttpClient 教程 (一)
2012-03-20 15:47 997HttpClient 教程 (一) 前言 ... -
HTTP客户端服务
2012-03-20 15:39 13625.1 HttpClient门面 HttpClient接口代 ... -
Android 网络开发详解
2012-03-19 16:41 1225// 创建一个 HttpClient 实例 // 注意 H ... -
关于虚拟机AVD:Android Virtual Devices
2012-03-15 15:51 10021.拷贝虚拟SD卡文件至本地: DDMS视图->File ... -
向SD卡写文件
2012-03-15 15:47 997AndroidManifest.xml: SD卡创建与删除文 ... -
Android 近百个项目的源代码,覆盖Android开发的每个领域
2012-03-08 12:18 876Android PDF 阅读器 http://sourcefo ... -
关于谷歌地图的问题:requires unavailable shared library com.google.android.maps
2012-03-08 09:28 6501关于谷歌地图和百度地图的抉择: 补充:http://news ... -
Android Google Maps API key 申请
2012-03-07 15:17 20141.找debug.keystore文件路径: Eclipse- ... -
Android的断点设置
2012-03-07 14:46 3916Note: 在onCreate方法中加入Debug.waitF ...
相关推荐
"Android 推送解决方案" Android 推送解决方案是指在 Android 平台上实现推送功能的各种方法和技术。推送功能是在移动互联网时代中的一种常见的技术,主要应用于各类移动应用程序中,以便实时地将服务器端的最新...
本知识点将深入探讨"Android推送源码",包括其工作原理、实现机制以及如何通过JPush Android SDK进行集成。 一、推送服务概述 推送服务是移动应用与用户保持联系的一种手段,它允许服务器端直接向客户端发送消息,...
### Android推送代码整合详解 在移动互联网时代,即时消息推送已成为各类App不可或缺的功能之一,它不仅可以提高用户活跃度,还能有效提升用户体验。本篇将基于提供的文件内容,深入解析如何进行Android推送代码...
Android推送方案.ppt
本文将深入探讨Android推送Activity跳转的控制处理,包括消息接收、解析、用户交互以及不同场景下的跳转策略。 首先,我们需要了解Android的推送服务。常见的推送服务有Google的Firebase Cloud Messaging (FCM) 和...
本文将深入探讨如何利用REST API实现从客户端进行Android推送,特别关注百度云推送这一服务。首先,我们需要了解REST(Representational State Transfer)架构风格,它是一种通过HTTP协议进行数据交互的方式,简洁且...
下面我们将详细探讨Android推送服务的基本概念、工作原理以及如何在实践中应用。 **Android推送服务概述** Android推送服务允许应用在后台接收服务器发送的消息,即使应用没有运行,用户也能够收到通知。常见的...
1. **Android推送机制**:Android系统的推送服务主要是通过Google的GCM(Google Cloud Messaging)和现在的FCM(Firebase Cloud Messaging)来实现的。FCM是Google提供的一种免费的服务,允许开发者向Android、iOS和...
本文将深入探讨“模拟Android推送TCP测试”的主题,解析Android推送原理,并介绍如何通过TCP连接与服务器进行通信。 首先,Android推送主要分为两种方式:Google的GCM(Google Cloud Messaging)和其后续的FCM...
本教程将深入探讨“Android推送服务器”与“Android客户端”的集成和工作原理。 首先,我们来看“Android推送服务器”。推送服务通常基于云,例如Google的Firebase Cloud Messaging (FCM) 或以前的Google Cloud ...
"android推送服务器与客户端1"的主题涉及到Android平台上的远程消息推送技术,通常用于通知、更新或者数据同步。在这个话题中,我们将深入探讨Android推送服务的工作原理、实现方式以及相关组件。 首先,Android推...
下面将详细介绍基于百度云推送实现Android推送聊天的相关知识点。 1. **百度云推送服务**:百度云推送是百度提供的免费推送服务,支持Android和iOS平台,可帮助开发者实现设备与服务器之间的消息推送,即使应用在...
在Android平台上,信息推送服务是应用开发者不可或缺的功能之一,它使得应用可以在后台高效地与服务器进行通信,即使用户没有...这份资源对于学习和实践Android推送服务,尤其是基于XMPP的实现,具有很高的参考价值。
### Android推送实现详解 #### 一、Android推送技术概述 Android推送是指在用户未打开应用的情况下,通过服务器向用户手机发送消息的过程。这种方式能够有效提高应用的活跃度和用户粘性,是移动互联网时代非常重要...
Android推送(Android Push Notifications,简称AndroidPN)使得服务器能够将数据推送到设备,即使应用在后台或完全关闭的状态下也能接收到通知。这一功能对于提升用户体验,尤其是即时通讯、社交应用以及消息提醒类...
本教程将围绕"android推送Demo"展开,深入探讨Android消息推送的相关技术,以及如何实现一个基本的消息推送系统。 1. **GCM(Google Cloud Messaging)与FCM(Firebase Cloud Messaging)** - GCM是谷歌早期推出的...
### Android推送实现方案探讨 #### 背景与概述 随着移动互联网的迅速发展,智能手机已成为人们日常生活中不可或缺的一部分。在此背景下,推送技术作为一种能够实时向用户传递信息的关键技术,在移动应用开发中扮演...
在探讨Android实现推送方式解决方案的过程中,我们聚焦于XMPP协议这一关键知识点,深入解析其在Android推送机制中的应用。XMPP(Extensible Messaging and Presence Protocol)作为一种基于XML的即时通讯协议,不仅...