最近手头一个项目中需要用到消息推送,查了蛮多资料,感觉这篇写的最好,感谢无私奉献的人.
关于服务器端向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。主要是用来展示用户状态和发送信息用的,如下图:
附件的图片1 和图片2
这方面的技术已经比较成熟,就不再细说了,主要要说的还是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下载地址
关于服务器端向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。主要是用来展示用户状态和发送信息用的,如下图:
附件的图片1 和图片2
这方面的技术已经比较成熟,就不再细说了,主要要说的还是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下载地址
本文转载自:http://www.iteye.com/topic/1117043#2266007
如果需要使用轮询方式,则可以使用handler实现,很简单如下
private boolean isRunning = true;
private final int LOOP = 1;
public Handler handler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case LOOP:
//1、业务逻辑处理代码
if(isRunning){
//2、向服务器请求数据代码
Message message = obtainMessage(LOOP);
sendMessagedelayed(message ,30*1000);
break;
}
}
}
}
- 大小: 25.8 KB
- 大小: 10.6 KB
- 大小: 10.6 KB
- 大小: 25.8 KB
分享到:
相关推荐
基于SpringBoot、RabbitMQ的Android消息推送平台搭建。亲测可用。有的公司对所要推送的消息保密要求比较高,不希望被第三方看到,可以使用此种方式进行消息推送。如果所要推送的人群比较多,可以搭建RabbitMQ集群...
Android中利用App实现消息推送机制
Android中利用App实现消息推送机制的代码实例
一个Android消息推送系统,包括Android客户端和服务端的实现。客户端支持长连接和短连接方式,长连接采用MQTT协议,短连接采用HTTP协议。服务端整合到web项中目中,有一个简单的界面进行操作处理。
Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码.rar Android中集成极光推送实现推送消息通知与根据别名指定推送示例代码....
android实现消息推送源码
毕业设计《Android平台校园消息推送服务的设计与实现》,基于AndroidPN实现的即时通信系统,Android客户端部分。.zip毕业设计《Android平台校园消息推送服务的设计与实现》,基于AndroidPN实现的即时通信系统,...
MQTT实现android消息推送,资源包括实现的详细教程文档,例子源代码,服务器端源代码,rsmb。
android 通过百度云推送实现消息的推送
apollo实现c#与android消息推送 需要的软件和包是apache apollo的代理服务器
该资源实现了基于Android端的socket长连接编程消息推送,很好的模仿了QQ消息的推送原理。支持p2p、s2p消息推送
使用谷歌的GCM服务(Google Cloud Messaging)实现Android消息推送
极光推送是比较完善的第三方消息推送平台,利用该平台能够轻松实现Android消息推送,该推送为长连接实时消息推送。
Android实例源码-消息推送通知栏类安卓源代码(5例) NotificationTest 消息推送的简单demo 实现Notification的通知栏常驻 消息推送完美demo 消息推送最新demo +服务器 激光推送客户端demo
不采用第三方推送机制,自己和后台配合实现的推送通知,有心跳包,service轮询机制,通知消息,tcp传递消息等。
android利用WebSocket实现消息推送
Android 实现XMP协议,基于 mqtt 消息推送通知指南
Android百度云推送,通过百度云推送的SDK和下载的demo实现一个简单的消息推送.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
本文介绍了一种基于XMPP 协议的AndroidPn 开源框架的实现模型,将其部署在MySQL 数据库和Tomcat 服务器下,实现并改进了实时推送消息、自定义消息结构和内容、推送服务开机启动、手机端服务唤醒、发送离线消息等实用...
openfire下,android实现消息推送的小demo