openfire 代码学习


源码分析

http://www.360doc.com/content/13/0601/17/1542811_289727966.shtml 


优化

http://blog.csdn.net/smm11230704/article/details/7468010


基础

http://roserouge.iteye.com/category/41532



spark 树形结构

http://hi.baidu.com/awol2005ex/item/8c673626e8ff493194f62bd0


支持msn  网关插件

http://music.573114.com/Blog/Html/294B/700738.html


 webchart

http://cxlh.iteye.com/blog/961564

 

改造MUC实现Openfire群

http://www.189works.com/article-42228-1.html


Openfire支持视频了

Openfire是一个即时通讯的服务器端实现,底层采用XMPP(jabber)协议。如果你不知道的话可以看:http://www.igniterealtime.org 这个它的网站。

这个已经研究了两周了,目前对他的实现方式及核心技术都有了一些了解。
目前openfire已经支持视频通讯了,这个还是很不错的,它是基于flash流媒体来
实现的,使用的是opensource 的 red5服务器做成plugin的方式,加入到了openfire中
spark客户端也支持这个功能了,我已经在IE下测试通过:)

在网上关注了好长时间,openfire(wildfire)终于支持视频了,不过人家06年就做了。

使用的方法是:
环境要求:需要jre1.6的环境,原因是red5是在jdk1.6下编译的

1)到http://www.igniterealtime.org/projects/openfire/plugins-beta.jsp 在这里下载red5.war 这个plugin,然后放到openfire目录下的plugin下,jetty会自动解压。
2)安装后,将red5包中的red5-plugin.jar copy到spark的plugin目录中
3)然后就可以用spark进行视频了。

目前还是beta版,现在就是看窗口有点小。


http://code.google.com/p/redfire/downloads/list

 

 

Openfire 好友状态的发送(用户登录)

http://blog.csdn.net/yjl49/article/details/6680097?reload 

         客户端在登录 Openfire 时都会收到自己订阅的好友状态,那么这个好友状态是怎么下发下去的呢?

           用户在登录后会发送一个<presence> 来更新自己的状态,在PresenceRouter 中进行处理。

 这个presence 交由PresenceUpdateHandler 处理,在判断用户为注册用户后使用RosterManager.getRoster() 来获取所有已经订阅的其他用户。

针对每个用户判断关系类型,如果为SUB_FROM,SUB_BOTH 则说明此用户为订阅了自己的。

       先向订阅了自己的用户广播状态更新消息。调用initSesion(),从中取出SUB关糸为SUB_TO 和 SUB_BOTH的,调用PresenceManagerImpl 中的probPresence()  方法来处理每个被订阅者。probPresence()通过sessionManager获取每个用户的在线情况,组装presence并发送给登录用户。

 

 

 

Openfire 用户离线、断线 及心跳检测

http://www.cnblogs.com/yjl49/archive/2011/09/29/2371955.html

客户端登出分为正常离线和断线,正常离线会发送presence 消息通知服务器,断线则无通知发送。


1. 正常离线:

客户端在离线之前发送<presence id='***' type ="unavailable"></presence>

由PresenceRouter 路由到PresenceUpdateHandler 中处理。

判断Type为unavailable 之后先进行广播,再设置session的状态,再更新presenceManager中用户最后一次的状态。

presenceManager中会更新lastActivityCache 中的离线时间(这个时间就是我们在OF控制台中 用户/组 页面中看到的“最近一次退出” 的值来源了),如果这个presence 中含有status 子项,则会同时将此条presence 记录到ofpresence 数据库表中。


2.断线:

   如果因为网络原因导致断线,服务器端无法收到客户端口的presence消息,但MINA框架会激发sessionClosed事件,在OF的ConnectionHandler的sessionClosed() 方法中可进行后续处理。在这个方法中OF模似了客户端口离线的presence。

  

3.OF之心跳检测:

在OF服务器设置中有一项 Client Connections --> Idle Connections Policy

选择Disconnect  client after they have been idle for [***] seconds

        Send a XMPP Ping request to idle clients

对这两项的解释如下:

        MINA框架本身提供了idle检测功能,这项功能可检测客户端口建立了TCP/IP连接、却不发送任何消息的情况。

当我们设置了第一项中的时长,OF会调用MINA的session.setIdleTime()方法,在客户端口连接经过指定时长未发送任何消息的情况下触发sessionIdle事件,由sessionIdle()方法处理。

        在ClientConnectionHandler 的sessionIdle()方法中判断当前的idle次数大于1次时将关闭客户端连接。  我们设置了idle Time 之后这个idle的检测发生在达到一半时间和达到指定时间,每次检测都会将idle 的次数加1 。 也就是说我们一旦设定了这个时长,则MINA框架会在这个时长的一半时间内,客户端仍未发送消息时触发一次sessionIdle事件,然后在到达指定时长,客户端仍未发送消息时再触发一次。

        Openfire 对这个ConnectionHandler 进行了再一次封装,在第一次触发sessionIdle时发送一次ping 消息,逼迫客户端进行响应。-------------这里就是我们设置第二个选项的意义所在。

        使用心跳检测我们可以关闭那些长时间不活动的连接,以节约OF的资源。

 

 

 

cache

 http://www.cnblogs.com/yjl49/archive/2011/10/08/2371954.html


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值