发布网友 发布时间:2022-04-24 07:41
共1个回答
热心网友 时间:2022-05-02 19:18
在Androidpn的底层主要采用的两大框架mina和openfire两大框架,其中mina主要为底层数据传输的Socket框架。下面简单的介绍一下Socket框架
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 同时提供了网络通信的Server 端、Client 端的封装,无论是哪端,Mina 在整个网通通信结构中都处于如下的位置:
可见Mina 的API 将真正的网络通信与我们的应用程序隔离开来 ,你只需要关心你要发送、接收的数据以及你的业务逻辑即可。同样的,无论是哪端,Mina 的执行流程如下所示:
(1). IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。
(2). IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。
(3). IoFilter:这个接口定义一组*,这些*可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。
(4). IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。
通过Mina的原理我们研究androidpn的运行流程不能看出,如下:
1.spring初始化并启动过程,调用NioSocketAcceptor。
2.NioSocketAcceptor开始执行调用IoProcessor.
3.IoProcessor开始调用FilterChain。FilterChain调用相关的IoFilter的。其中ProtocolCodecFilter的过滤器调用了org.androidpn.server.xmpp.codec.XmppCodecFactory进行编码。
4.XmppIoHandler实现自IoHanlder并调用通过openfire 的XMLLightweightParser解析相关的业务逻辑。
5.根据解析的信息调用xmpp并处理相关信息。
AndroidPN(Android Push Notification) 是一个基于 XMPP 协议的 Java 开源推送通知实现,它包含了完整的客户端和服务端。
AndroidPN基于 Openfire 下的一些开源项目构建。
AndroidPN服务器包含两个部分,
一个是侦听在5222端口上的XMPP服务,负责与客户端的XMPPConnection类进行通信,作用是用户注册和身份认证,并发送推送通知消息。
另外一部分是Web服务器,采用一个轻量级的HTTP服务器,负责接收用户的Web请求。
最上层包含四个组成部分,分别是SessionManager,Auth Manager,PresenceManager以及Notification Manager。
SessionManager负责管理客户端与服务器之间的会话。
Auth Manager负责客户端用户认证管理。
Presence Manager负责管理客户端用户的登录状态。
NotificationManager负责实现服务器向客户端推送消息功能。
IQHandler消息处理器的类:
IQHandler:消息处理器抽象类。
IQAuthHandler:权限协议的消息处理类,消息的类型为:jabber:iq:auth
IQRegisterHandler:用户注册的消息处理类,消息类型为: jabber:iq:register
IQRosterHandler:用户消息交互类,消息类型为:jabber:iq:roster
PresenceUpdateHandler:用户状态展现变化处理类。内部调用,不具有类型。