- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenFire开发环境搭建
1、导入项目
2、ANT运行配置
3、部署项目
4、启动服务器
5、访问服务器
6、代码研究
Openfire的socket网络连接包括:
1.服务器和服务器之间的连接(监听在端口5269)
2.外部组件和服务器之间的连接(监听在端口5275)
3.多元(complex)连接(监听在端口5269)
4.客户端和服务器的连接(监听在端口5222)
5.客户端和服务器通过TLS/SSL3.0的连接。(监听在端口5223)
客户端和服务器的连接分析:
A、这些连接都是通过ConnectionManager接口实现管理的,程序中对ConnectionManager接口的实现类是org.jivesoftware.openfire.spi.ConnectionManagerImpl,它是作为一个模块(Module)类加载到服务器中的。
在ConnectionManagerImpl中是通过调用startClientListeners方法来初始化和开始端口监听的。
startClientListeners方法使用的是Apache的 Mina框架来实现网络连接的,Mina框架的模式如下:
几个接口:
IoAccepter 相当于网络应用程序中的服务器端
IoConnector 相当于客户端
IoSession 当前客户端到服务器端的一个连接实例
IoHandler 业务处理逻辑
IoFilter 过滤器用于连接通讯层接口与业务层接口
IoFilter:
IoFilter为MINA的功能扩展提供了接口。它拦截所有的IO事件进行事件的预处理和后处理。它与Servlet中的filter机制十分相似。多个IoFilter存放在IoFilterChain中
IoFilter能够实现以下功能:
数据转换
事件日志
性能检测
在Openfire中主要用filter这种机制来进行数据转换。
B、Protocol Codec Factory:
Protocol Codec Factory提供了方便的Protocol支持,通过它的Encoder和Decoder,可以方便的扩展并支持各种基于Socket的网络协议,比如HTTP服务器、FTP服务器、Telnet服务器等等。
要实现自己的编码/解码器(codec)只需要实现interface: ProtocolCodecFactory即可,在Openfire中实现ProtocolCodecFactory的类为org.jivesoftware.openfire.nio.XMPPCodecFactory。
IoHandler:
MINA中,所有的业务逻辑都有实现了IoHandler的class完成 ,当事件发生时,将触发IoHandler中的方法:
sessionCreated
sessionOpened
sessionClosed
sessionIdle
exceptionCaught
messageReceived
messageSent
C、在Openfire中客户端和服务器连接的IoHandler实现类是org.jivesoftware.openfire.nio.ClientConnectionHandler,它是从ConnectionHandler中继承来的。
D、startClientListeners方法首先为Mina框架设置线程池,再将一个由XMPPCodecFactory作为Protocol Codec Factory的Filter放入到FilterChain中,然后绑定到端口5222,并将ClientConnectionHandler作为IoHandler对数据进行处理。完成这些步骤后Openfire就在5222等待客户端的连接。
E、客户端连接的处理过程:
当有客户端进行连接时根据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(如果pars
文档评论(0)