在
ConnectionManagerImpl
中是通过调用
startClientListeners
方法来初始化和开始端口监听的。
在
startClientListeners
方法使用的是
Apache
的
Mina
框架来实现网络连接的,
Mina
框架的模式如下:
IoFilter
:
IoFilter
为
MINA
的功能扩展提供了接口。它拦截所有的
IO
事件进行事件的预处理和后处理。它与
Servlet
中的
filter
机制十分相似。多个
IoFilter
存放在
IoFilterChain
中
IoFilter
能够实现以下功能:数据转换,事件日志,性能检测
在
Openfire
中主要用
filter
这种机制来进行数据转换。
Protocol Codec Factory
:
Protocol Codec Factory
提供了方便的
Protocol
支持,通过它的
Encoder
和
Decoder
,可以方便的扩展并支持各种基于
Socket
的网络协议,比如
HTTP
服务器、
FTP
服务器、
Telnet
服务器等等。
要实现自己的编码
/
解码器
(codec)
只需要实现
interface: ProtocolCodecFactory
即可,在
Openfire
中实现
ProtocolCodecFactory
的类为
XMPPCodecFactory
。
IoHandler
:
MINA
中,所有的业务逻辑都有实现了
IoHandler
的
class
完成
,当事件发生时,将触发
IoHandler
中的方法
:
sessionCreated
sessionOpened
sessionClosed
sessionIdle
exceptionCaught
messageReceived
messageSent
在
Openfire
中客户端和服务器连接的
IoHandler
实现类是
ClientConnectionHandler
,它是从
ConnectionHandler
中继承来的。
startClientListeners
方法首先为
Mian
框架设置线程池,再将一个由
XMPPCodecFactory
作为
Protocol Codec Factory
的
Filter
放入到
FilterChain
中,
然后绑定到端口
5222
,并将
ClientConnectionHandler
作为
IoHandler
对数据进行处理。完成这些步骤后
Openfire
就在
5222
等待客户端的连接。
客户端连接的处理过程:
当有客户端进行连接时根据
Mina
框架的模式首先调用的是
sessionOpened
方法。
sessionOpened
首先为此新连接构造了一个
parser
(
XMLLightWeightParser
),这个
parser
是专门给
XMPPDecoder
(是
XMPPCodecFactory
的解码器类)
使用的,再创建一个
Openfire
的
Connection
类实例
connection
和一个
StanzaHandler
的实例。最后将以上的
parser, connection
和
StanzaHandler
的实例存放在
Mina
的
session
中,以便以后使用。
当有数据发送过来时,
Mina
框架会调用
messageReceived
方法
messageReceived
首先从
Mina
的
session
中得到在
sessionOpened
方法中创建的
StanzaHandler
实例
handler
,然后从
parsers
中得到一个
parser
(如果
parsers
中没有可以创建一个新的实例)(注意这个
parser
和在
sessionOpened
方法中创建的
parser
不同,这个
parser
是用来处理
Stanza
的,而在
sessionOpened
方法中创建的
parser
是在
filter
中用来解码的,一句话说就是在
sessionOpened
方法中创建的
parser
是更低一层的
parser
)。最后将
xml
数据包交给
StanzaHander
的实例
hander
进行处理。
StanzaHander的实例hander处理xml数据包的过程
StanzaHander
首先判断
xml
数据包的类型,
.
如果数据包以“
<stream:stream
”打头那么说明客户端刚刚连接,需要初始化通信(符合
XMPP
协议)
Openfire
首先为此客户端建立一个与客户端
JID
相关的
ClientSession
,而后与客户端交互协商例如是否使用
SSL
,是否使用压缩等问题。当协商完成之后进入正常通信阶段,则可以将
xml
数据包交给这个用户的
ClientSession
进行派送(
deliever
),经过派送数据包可以发送给
PacketRouteImpl
模块进行处理。
----------------------------------------------------------------------------------------------------------------------------------------------------
结点类包
起点 org.jivesoftware.openfire.starter.ServerStarter
服务器 org.jivesoftware.openfire.XMPPServer
用户验证包 里面有AuthProvier接口、几个实现类。。。
org.jivesoftware.openfire.auth
用户 org.jivesoftware.openfire.user
组 org.jivesoftware.openfire.group
好友列表org.jivesoftware.openfire.roster
开发插件会用到的接口和包
org.jivesoftware.openfire.container.Plugins
org.xmpp.component.Component
org.jivesoftware.openfire.event
org.jivesoftware.openfire.handler
拦截器
org.jivesoftware.openfire.interceptor
相关推荐
openfire开发文档[汇编].pdf
openfire开发文档.pdf
该文档是我精心总结openfire的部署、运行、压测等一些问题及心得;
openfire Java客户端开发文档详解
这是一个文档,内容是如何编写Openfire开发插件、部署源码
Open Fire java-android开发文档
openfire二次开发文档 从安装到部署,数据库表、字段、openfire常用的类,配置文件等信息 插件开发等等
详细的openfire开发配置说明文档,里面有比较全面的步骤说明与截图说明
收集整理的关于Openfire和Spark二次开发的文档
spark+openfire二次开发文档
openfire 聊天记录开发源码 ,包括说明文档,一步一步跟我走绝对能搞定,只为求分
个人总结的IM(Spark+Smack+Openfire)开发资料详细说明文档,非常详细的文档,说明每个包有什么用的,每个包的说明
基本信息 1 ...附:《Openfire插件开发》 23 开发插件的目的 23 插件的目录结构 23 plugin.xml配置文件的结构 24 管理控制台添加页面 25 实现自己的插件plugin类 25 打包成jar或者war文件 26 其他参考信息 28
这个是交给你怎么搭建openfire服务器以及使用xmpp开发聊天应用的文档,是学习使用xmpp开发iOS聊天应用非常实用的ppt文档
基于 OpenFire 的TVBox管理平台开发笔记的工程源码,包括PC版,android版以及plugin jsp版三个版本实现的管理平台工程源码及TVBox端的client 工程代码。
环境 openfire4.1.6 myeclipse jdk7 smack4.1.6 openfire服务器(安装流程...开发参考文档(smack下载包中)file:///E:/down_demo/smack_4_1_6/releasedocs/documentation/index.html