关于服务器端向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下载地址
分享到:
相关推荐
《Austin消息推送平台v1.0:构建高效的消息通知系统》 在当今信息化社会,实时、精准的消息推送已经成为各类应用和服务的重要组成部分。"Austin消息推送平台v1.0"正是一款专为此目的设计的系统软件工具,它为开发者...
小米推送是一种针对Android应用开发者的消息推送服务,它可以帮助开发者实现向用户设备实时发送消息的功能,提高用户活跃度和应用粘性。小米推送提供了一系列API和SDK,方便开发者集成到自己的应用中。在这个"小米推...
本资源提供了一套基于Java的消息推送平台的设计源码,包含349个文件,其中包括278个Java源代码文件,15个YAML配置文件,13个XML配置文件,以及8个JPEG图片文件。此外,还包括7个配置文件,5个SQL文件,4个Properties...
在【Hbuilder+Mui移动消息推送】项目中,采用了“个推”作为消息推送的服务提供商。个推是一家专注于移动互联网推送技术的公司,其提供的推送服务可以实现精准、实时的消息推送,支持单个用户、多个用户以及全局推送...
在Android应用开发中,消息推送是一项关键功能,它能让用户即使在不打开应用的情况下也能收到新消息的通知。这里我们关注的焦点是“Android消息推送源码”,这通常涉及到后台服务、通知栏通知以及Intent的使用等方面...
苹果消息推送(Apple Push Notification service, APNs)是苹果公司为开发者提供的一项服务,用于向iOS、iPadOS、watchOS、tvOS以及macOS设备发送远程通知。在Java环境中实现APNs推送,需要掌握以下几个核心知识点:...
Java-Push开源实时消息推送系统是一种基于Java技术构建的、专为实现高效、稳定、实时的消息推送服务而设计的解决方案。在当今互联网应用中,实时消息推送已经成为提高用户体验和互动性的重要工具,尤其是在社交网络...
泛微Ecology9.0第三方系统消息推送接口调用文档 泛微Ecology9.0第三方系统消息推送接口调用文档是泛微Ecology9.0平台提供的一种消息推送机制,旨在帮助第三方系统与Ecology9.0平台集成,实现消息的实时推送和处理。...
在IT行业中,消息推送服务是实现应用程序间实时通信的关键技术,尤其在开发聊天应用时尤为重要。本文将基于“轻量级消息推送client&server”这一主题,深入探讨如何构建一个简单而有效的消息推送系统,主要关注...
【消息推送笔记】这篇笔记主要记录了学习郭林老师关于消息推送课程时的要点,特别是通过Mina框架实现服务器端的基础架构。Mina是一个轻量级的网络通信框架,广泛用于构建高性能、高可用性的网络应用程序,如消息推送...
在IT行业中,消息推送是一项关键的技术,特别是在开发跨平台应用时。本文将深入探讨如何使用C#语言结合Apollo代理服务器来实现C#与Android设备之间的消息推送。Apollo是一款开源的消息中间件,它提供了高可用、高...
在iOS应用开发中,消息推送是一项重要的功能,它允许服务器向设备发送通知,即使应用程序在后台运行或完全关闭。这个“ios 消息推送 java后端demo”是为开发者提供的一个示例,帮助理解如何使用Java后端实现对iOS...
【标题】"archive_ austin消息推送平台 v1.0 [江西新余电信].zip.zip" 提供的是一个关于消息推送平台的软件包,版本号为v1.0,主要针对的是江西新余电信的网络环境。这个压缩包可能是由archive_ austin团队开发的,...
消息推送在IT行业中是一项至关重要的技术,特别是在移动应用开发中,它允许应用程序向用户实时发送通知,无需用户主动打开应用。这个"消息推送demo"很可能是一个示例项目,用于演示如何实现这一功能。下面,我们将...
在IT行业中,消息推送服务是实现应用程序与用户实时交互的关键技术。友盟消息推送服务作为一个广泛使用的第三方平台,为开发者提供了便捷的API和SDK,帮助他们实现高效、稳定的消息推送功能。本文将深入探讨如何在...
在Android平台上,消息推送是一项关键的技术,它使得应用能在后台运行或者用户不直接与应用交互时,依然能够向用户发送实时的通知。这对于社交应用、即时通讯(IM)软件、新闻应用等来说尤其重要,因为它们需要时刻...
### ECOLOGY9消息推送至企业微信、钉钉配置说明 #### 一、配置详解 在ECOLOGY9系统中实现消息推送至企业微信、钉钉的功能时,需要按照以下步骤进行配置: ##### 1. 设置新到达流程(待办流程)推送到企业微信、...
在IT行业中,消息推送是一项重要的技术,它使得服务器能够实时地向客户端发送数据,而无需客户端不断地轮询请求。在本教程中,我们将探讨如何利用Direct Web Remoting (DWR) 和Spring框架来实现这样的功能。 DWR是...
### Python3 实现钉钉消息推送方法详解 #### 背景 在现代企业环境中,高效的信息传递变得越来越重要。钉钉作为一款广泛使用的办公软件,不仅提供了丰富的沟通功能,还支持通过自定义机器人实现自动化的消息推送。...
在IT行业中,消息推送是一项关键的技术,特别是在实时通信和交互性应用中。本文将深入探讨“C#消息推送源码”这一主题,结合标签“dwr”,“comet”,“消息推送”,“反推送”以及“源码”,来解析相关的知识点。 ...