(文中部分内容来自网络)
XMPP协议:
XMPP : The Extensible Messaging andPresence Protocol.
中文全称:可扩展通讯和表示协议.
简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。
它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即
使其操作系统和浏览器不同。
XMPP主要显著的优点主要有以下几个方面:
1、分布式 任何人都可以运行自己的XMPP服务器,它没有主服务器,客户端简单
2、安全性很高。使用SASL及TLS等技术的可靠安全性
3、开发性 它是开源的,易于进行学习和了解
4、跨平台 毋庸置疑,使用的XML数据格式进行传输的
Androidpn:
Androidpn :android pushnotification(中文名称:Android消息推送)。
基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。在引用smack的基础上
实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是Androidpn。Androidpn在客户端集成了smack。
这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。所以Androidpn可以说是使用了smack框架
的开源项目。
Androidpn使用好处:
用Androidpn好处有以下方面:采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议)。
良好的框架支持(专门为android而产生的推送框架smack,以及很好的管理socket的框架MINA,都是很成熟的产品);
完全开放的源代码(我们可以在Androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代
码,降低了android的开发难度。
Androidpn技术实现:
(这里就不说下载源码后怎么操作了,网上教程颇多)
客户端与服务器建立socket连接。
Androidpn的客户端中,进行管理连接的信息,比如XMPP的端口、IP(域名)、登录的用户名密码,以及对连接的维护(定时的
发送连接请求保持连接不失效)。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会
指定服务器的端口号,然后把信息发送到服务器端;而向服务器发送消息:<stream>根节点的方式开始传递,只有在服
务器和客户端关闭的时候才会发送它的结束标记</stream>。以客户端通过XMPP协议只用做的就是接收消息,而所有
其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。
Androidpn的服务器端,Androidpn主要用到的技术是Spring和Hibernate。保存用户信息到数据库并做验证,主要是用来
展示用户状态和发送信息用的。在服务器关闭的时候,发送一个</stream>标记到客户端,告知连接断开,客户端需重
新连接。管理Socket连接的时候,Androidpn采用了MINA框架来进行管理,MINA的优点就是改变了我们传统的管理socket的方式,比如每建立一个socket开一个线程,而MINA
可以实现多个线程管理N多个用户(这句不是太明白,
谁知道给留个言说下,万分感谢)。在处理高并发的推送上无疑是有巨大的好处的。
在数据传输过程中,信息处理采用XML节的方式传递信息,消息封装通常采用IQ(Info/Query)、Message(消息)、
Presence(在线状态探测)。
但是Androippn中好像没有用到Message(也许我理解错误),从Server到Client和Client到Server都用的IQ封装。
除此之外,xml的传递过程还有type可为set、get、result、error四种类型,我个人理解是:set指请求更新(改变)处理
(如从Server推送消息到client、注册用户),get指获取数据(如取好友列表),result是指请求更新后给client的应答
(如登录是否成功得告诉Client,见ClientSession中的createSession()方法),error就明显了指错误,告诉Client断开
连接。
长连接和重连:
1.客户端第一次连接服务器建立的是一个socket连接,如果服务器需要关闭返回</stream>或者一个表示ERROR的
流返回给客户端,客户端将启动定时重连线程。
2.本地连接服务器失败后将启动定时重连线程。
3.本地监听网络信息,如果网络不可用,也将启动重连线程。
4.连接成功后,监听socket连接状态,如果断开,启动重连线程。
注:1)据说防火墙可能会关闭非活动状态的连接,所以又据说建立连接后会向服务器发送心跳(keepLive)。
主要文件作用:
客户端:
DemoAppActivity程序入口Activity
ServiceManager 服务管理器,控制后台服务的启动和停止
NotificationService 初始化广播,并注册广播; 初始化线程发送开始连接广播等其它
XmppManager 定义调用asmack库的方法,做连接及其它。
ConnectivityReceiver连接广播接收者,调用XmppManager的连接方法
PersistentConnectionListener 重连监听,由asmack调用,在连接时被注册
PhoneStateChangeListener 手机连接状态监听,服务启动时被注册
NotificationIQProvider 通知消息提供者,由asmack库调用,并接收到服务器返回的消息(xml)
NotificationPacketListener 通知消息监听器,在连接后被注册,由asmack库调用,当NotificationIQProvider接收
到服务器消息后,会调用监听器的回调方法processPacket,再发送广播给NotificationReceiver
NotificationReceiver 通知广播接收者,调用Notifier中的通知方法
Notifier调用notify方法界面通知。
注:NotificationIQProvider中parseIQ()方法解析服务器发送的xml数据并封装成实体。
服务器:
org.androidpn.server.xmpp 包里面定义了一些异常类型,主要是包含有入口类XmppServer,这个类用来启动和停止server程序。
org.androidpn.server.xmpp.auth 包里面是认证的一些类,我们自己的认证模块可以在这里与androidpn进行结合。
org.androidpn.server.xmpp.codec 是XMPP协议的XML文件解析包,server收到和发送的消息都要通过这个包来进行xmpp协议编码和解码。
org.androidpn.server.xmpp.handler 包主要是对消息的处理,我们可以针对不同的消息类型定义自己的handler,可在这包在类中处理客户端发送的数据
org.androidpn.server.xmpp.net 包负责维护与client之间的持久连接,并实现了一些传输方式供发送xmpp消息时使用。
org.androidpn.server.xmpp.presence 里面只包含PresenceManager类,用来维护client的在线状态。
org.androidpn.server.xmpp.push 里面只有一个NotificationManager类包含有向client发送消息的接口,可自己封装需要的数据发送到客户端。
org.androidpn.server.xmpp.session包定义了用来表示持久链接的session,每个session包含一条连接的状态信息。用户管理所有会话,比如连接断开,删除session以及建立连接,添加session等等。
org.androidpn.server.xmpp.ssl是对连接进行ssl认证的工具包。
注: 以上红色包中,NotificationManager(org.androidpn.server.xmpp.push)带着username和message
到Session(org.androidpn.server.xmpp.session)类中找到相应的session,并封装成xml格式,再调用
Connection(org.androidpn.server.xmpp.net)中的deliver()方法给相应用户发送数据达到通信。
相关推荐
### 使用 AndroidPN 实现推送详解 #### 一、引言 在移动互联网时代,推送通知已成为提高用户活跃度和留存率的重要手段之一。对于Android应用而言,如何高效地实现服务器到客户端的消息推送成为了一个关键问题。...
AndroidPN实现了从服务器到android移动平台的文本消息推送。这里先简单说一下androidPN的安装过程。 下载androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip 网址:...
AndroidPN(Android Push Notification)是Android平台上的一种消息推送服务,旨在帮助开发者实现在应用程序后台时仍然能够接收服务器发送的通知或数据。在AndroidPN服务器推送的实现中,有以下几个关键知识点: 1....
Androidpn的核心功能是实现设备间的即时推送通知服务,它允许应用程序在后台运行时向用户发送消息,而无需持续保持网络连接或唤醒屏幕,从而节省电池和资源。在Android系统中,由于其后台运行机制的限制,实现这种推...
AndroidPN,全称为Android Push Notification...开发者可以通过阅读和分析这些代码,学习如何在实际项目中实现AndroidPN的自动重连机制。记得在实践中不断测试和调整,以确保在各种网络环境和设备条件下都能稳定工作。
在Android平台上,AndroidPN(Android Push Notification)是一个用于实现远程推送通知服务的开源项目。它允许开发者通过服务器向Android设备发送消息,即使应用程序在后台运行或完全关闭时也能接收到这些消息。本...
在AndroidPN客户端中,这一特性被用来实现在后台高效、可靠地推送通知到用户的设备。 AndroidPN客户端的设计目标是为开发者提供一个方便的工具,以便在他们的应用程序中集成远程推送通知功能,而无需持续连接到...
Androidpn客户端 和服务端源码下载,实现了消息推送。具体使用方法可百度。
AndroidPN(Android Push Notification)是一个开源项目,旨在为Android应用程序提供简单、高效的后台推送通知服务。这个项目通常需要与服务器端的组件配合工作,其中Tomcat作为常用的Java应用服务器,常常被用于...
AndroidPN(Android Push Notifications)是专门为Android平台设计的一个推送...了解并掌握这些内容,你就能有效地实现一个简单的推送通知服务。在实际开发过程中,可能还需要考虑安全性、性能优化以及兼容性等问题。
在IT行业中,构建高效、稳定的服务器环境是至关重要的。这里我们关注的是一个特定的配置——"androidpn tomcat + ...理解并掌握这些知识点,对于开发人员在实际项目中实现高效、可靠的服务器端推送通知服务至关重要。
在Android开发中,AndroidPN(Android Push Notification)是一种常见的服务,用于实现在服务器端向Android设备推送消息。本文将深入探讨如何将AndroidPN-server与Tomcat应用服务器进行整合,以便在MyEclipse环境中...
"AndroidPN—Demo"是一个基于Android平台的推送通知服务示例项目,主要展示了如何实现设备的登录、连接以及接收远程推送消息的功能。AndroidPN(Android Push Notification)是一种服务,允许开发者向他们的Android...
AndroidPN(Android Push Notification)是针对Android平台设计的一种推送服务,它基于XMPP(Extensible Messaging and Presence Protocol)协议实现。XMPP是一种开放标准的即时通讯协议,广泛应用于聊天、协作和推...
Androidpn推送框架源码分析及配置方法,压缩包里面包括服务端和客户端代码,及说明文档
AndroidPN(Android Push Notification)客户端是一款专门为Android操作系统设计的应用程序,用于实现远程服务器向设备推送通知的功能。在移动应用开发中,推送通知是一项至关重要的特性,它允许应用程序在后台状态...