客户端登出分为正常离线和断线,正常离线会发送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的资源。
相关推荐
openfire添加好友离线请求推送
实现openfire与用户数据库集成 实现用户认证、用户查询
NULL 博文链接:https://tw5566.iteye.com/blog/773235
offlineMsgPushOpenfire 离线消息推送插件, 本例使用 RESTFul 请求到另一台服务器来推送消息
[经典] Openfire SPARK 整合 扩展用户 用户组
Openfire Meetings Chrome extension(谷歌浏览器插件),因为不容易下载,所以特别上传上来,插件版本是0.0.5
Openfire Meetings Chrome extension(谷歌浏览器插件)。是对基于XMPP协议的openfire服务器的视频支持扩展插件,需要openfire服务器本身装有Openfire Meetings插件(官网...
openfire处理消息流程及openfire详细信息
NULL 博文链接:https://baobeituping.iteye.com/blog/1458842
openfire 3.9.3源码导入eclipse进行二次开发或学习所需要的包!
自己写的获取所有在线用户的openfire插件,直接上传到openfire服务器即可使用,访问路径为host:port/plugins/onlines/listall
openfire在线离线识别插件
openfire的用户接收消息计数器,应用很方便,通过填写openfire的用户user_no号与密码,还有服务器的ip地址,点击登录就可以等待消息的接收,并且统计接收消息的数量.
Openfire最主要的功能是实现XMPP服务器,Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送.
对Openfire进行扩展,支持在线指定聊天室和全部在线人员的查看。
代码里做了逻辑处理,会随机只返回3个,改下就可以了 访问路径 127.0.0.1:8080/plugins/onlineuser/getallusers
openfire插件,用户入群加web接口,史上最全,下载即用
Openfire二次开发问题分析及解决资料,列举了二次开发过程中可能会遇到的问题及解决的把办法。
Openfire3.7.1集群配置,针对需要多用户同时在线的openfire架构集群配置设置
目前研究插件的还比较少,简单做一下学习总结。详细介绍请看我的blog:http://hi.baidu.com/jyleon/blog/item/5a6627dd7fc4dbd18d1029bf.html