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

服务器端向Android客户端的推送解决方案的讨论

 
阅读更多
关于服务器端向Android客户端的推送,主要有三种方式:轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池SMS(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是很难找到免费的网关来发送短信;最后就是持久连接,主要是Socket通讯,这个解决了性能问题,但是耗电问题依旧没能解决。

在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较成熟的及时消息传递协议共有四种,而无疑最为主流就是XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。在网上可以找到很多的XMPP资料,这里就不在赘述了,不然越扯越多。总之,XMPP主要显著的优点主要有以下几个方面:

1、分布式任何人都可以运行自己的XMPP服务器,它没有主服务器

2、安全性很高。使用SASLTLS等技术的可靠安全性

3、开发性它是开源的,易于进行学习和了解

4、跨平台毋庸置疑,使用的XML进行传输的

说完优点,我们言归正传,基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。而如果把它直接用在Android上是不行的,因为android缺少了一些java的类库,于是一个改进版的asmack诞生了,它是专门为android而改进的androidsmack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是androidpushnotification,简称androidpn

Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不得不提到XMPP的具体细节。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提到的信息发送到服务器端,怎么发送消息的呢?以<stream>根节点的方式开始传递,只有在服务器和客户端关闭的时候才会发送它的结束标记</stream>。客户端通过XMPP协议只用做的就是接收消息,而所有其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。那么客户端和服务器端的消息回应是如何实现的?如要通过一个ID来标识,具体细节可以去查看XMPP协议。

一旦注册绑定后,服务器端就和客户端建立了连接,客户端只用负责去接收消息。所以当我们应用Androidpn的时候,客户端会非常的简单。而在服务器端,Androidpn又做了什么呢?

服务器端的展示方面,androidpn主要用到的技术是SpringHibernate。主要是用来展示用户状态和发送信息用的,如下图:




这方面的技术已经比较成熟,就不再细说了,主要要说的还是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协议进行数据传输(QQMSNGTalk等都是采用的这种协议);良好的框架支持(专门为android而产生的推送框架asmack,以及很好的管理socket的框架MINA,都是很成熟的产品);完全开放的源代码(我们可以在androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代码,降低了android的开发难度。缺点不言而喻,使用了太多的框架,如果想要改一些具体的实现,可能会迁移发动全身。不过如果你个懒人的话,完全满足你的需求了。

最后是我整理的androidpn的源码,完全可以使用。原来的服务器端用的jetty框架来代替tomcat的,我把它又重新整合到了tomcat下,可以完美的和你的服务器端融合。懒人们,来吧~~由于文件过大,所以用了外连~~喜欢的就去下载吧。。只需要改下client的raw文件夹下的ip地址就可以运行。。androidpn下载地址

分享到:
评论

相关推荐

    极光推送【java服务器端 和 Android客户端】

    在这个压缩包文件中,包含的是极光推送的Java服务器端集成指南以及Android客户端的示例代码。 一、极光推送服务概述 极光推送(JPush)是专门为开发者设计的推送服务,它允许开发者通过云端API向用户的移动设备发送...

    android推送解决方案

    "Android 推送解决方案" Android 推送解决方案是指在 Android 平台上实现推送功能的各种方法和技术。推送功能是在移动互联网时代中的一种常见的技术,主要应用于各类移动应用程序中,以便实时地将服务器端的最新...

    androidpn 消息推送客户端+服务器端

    总之,AndroidPN是一个强大的开源解决方案,它利用XMPP协议实现了Android设备的消息推送功能。理解其客户端和服务器端的运作机制,可以帮助开发者更有效地集成推送通知到自己的应用程序中。同时,熟悉XMPP协议和...

    Android 信息推送,史上最完美BUG! android 推送客户端

    本压缩包文件提供的内容是基于XMPP(Extensible Messaging and Presence Protocol)的Android信息推送客户端解决方案,针对原有代码中的BUG进行了修复,并允许开发者根据自己的业务需求进行定制。 XMPP是一种基于...

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

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

    XMPP消息推送Demo【服务器+客户端】

    总的来说,这个XMPP消息推送Demo提供了完整的服务器和客户端解决方案,帮助开发者快速理解和实践Android应用中的消息推送功能。通过学习和修改这个Demo,开发者可以为自己的应用构建可靠的推送通知系统,提高用户...

    Android 信息推送,史上完美无BUG,服务器端代码!

    ”正是针对这一需求,提供了经过优化和调试的服务器端XMPP解决方案。 首先,让我们详细了解一下XMPP服务器端的工作原理。XMPP服务器主要负责连接管理、用户认证、消息路由等功能。当Android客户端通过XMPP协议连接...

    .NET 极光推送的服务器端推送比较全面的Demo

    .NET平台上的极光推送(JPush)服务为开发者提供了一种高效、稳定的移动端消息推送解决方案。极光推送Demo旨在帮助开发者快速理解和应用服务器端推送技术,实现从服务器到客户端的消息传递。在本Demo中,我们将深入...

    见证Android消息推送时刻

    在Android应用开发中,消息推送是一项至关重要的技术,它能够实时地将服务器端的信息传递到用户的设备上,增强用户体验并促进用户与应用的互动。郭霖老师的“见证Android消息推送时刻”课程,深入讲解了这一领域的...

    android推送开源框架

    AndroidPN,全称为Android Push ...总之,AndroidPN为Android开发者提供了一套强大而灵活的推送解决方案,简化了远程通知的实现,使得开发者能够专注于应用的核心功能,同时确保用户能够及时收到重要更新和消息。

    Android之基于百度云推送IM

    总结,基于百度云推送的Android即时通讯解决方案提供了丰富的功能和易用的API,可以帮助开发者快速实现消息推送功能,提升用户体验。理解并熟练运用上述关键技术和知识点,是成功集成和优化推送服务的基础。

    若水新闻客户端和服务器端

    描述简洁,没有提供具体的技术细节,但我们可以推测这是一个完整的新闻资讯应用解决方案,涵盖了用户获取新闻内容的所有流程,从在Android设备上浏览、搜索到后台的数据处理和推送。 【标签】:“android 若水 新闻...

    ANDROID消息推送

    在Android开发中,消息推送是...总之,Android消息推送是一个涉及服务器端和客户端协同工作的复杂过程。开发者需要理解其工作原理,选择合适的推送服务,同时关注用户体验和系统优化,以提供高效、可靠的推送通知服务。

    Android推送之APNS 网站调用提供推送技术

    在Android应用开发中,推送服务是一项关键功能,...虽然这需要额外的服务器端工作,但它提供了跨平台的推送解决方案,对于多平台应用来说是值得投入的。在实际项目中,务必遵循最佳实践,确保推送服务的稳定性和效率。

    Android聊天服务器和客户端.rar

    在Android应用开发中,网络...这个项目不仅涵盖了Android客户端的开发,还涉及到服务器端的实现,是一个综合性的网络通信实践案例。通过学习和理解这个项目,开发者可以提升在Android网络编程和实时通信方面的能力。

    openfire+asmock实现android消息推送

    Openfire支持XmppPush,可以将服务器端的新消息推送到客户端,即使应用在后台或者设备熄屏状态下也能接收到通知。这通常涉及到Android的GCM(Google Cloud Messaging,已被FCM替换)或Firebase Cloud Messaging服务...

    极光推送服务器端

    - **多平台兼容**:极光推送服务兼容iOS和Android系统,为开发者提供了跨平台的推送解决方案,无论用户使用何种设备,都能接收到消息。 - **实时推送**:服务能够实现实时、精准的推送,确保消息及时传递到目标...

    Android-fpush-基于Nettyprotobuf实现的即时消息推送服务

    本项目"Android-fpush-基于Nettyprotobuf实现的即时消息推送服务"就是这样一个解决方案,它利用了Netty框架和Protocol Buffers(protobuf)技术来高效、稳定地实现这一功能。 Netty是一个高性能、异步事件驱动的...

    基于XMPP协议的Android消息推送设计与实现.pdf

    基于XMPP协议的Android消息推送设计与实现 本文主要介绍了基于XMPP协议的...本文基于XMPP协议的Android消息推送设计与实现,提供了一种高效、可靠和安全的消息推送解决方案,能够满足不同行业和领域的消息推送需求。

Global site tag (gtag.js) - Google Analytics