Openfire 用户离线、断线 及心跳检测
来源:互联网 发布:手机电影拍摄软件 编辑:程序博客网 时间:2024/05/21 17:20
Openfire 用户离线、断线 及心跳检测
客户端登出分为正常离线和断线,正常离线会发送presence 消息通知服务器,断线则无通知发送。
http://www.cnblogs.com/yjl49/archive/2011/09/29/2371955.html
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 用户离线、断线 及心跳检测
- Openfire 用户离线、断线 及心跳检测
- Openfire 用户离线、断线 及心跳检测
- Openfire 用户离线、断线 及心跳检测
- Openfire 用户离线、断线 及心跳检测
- Openfire 用户离线、断线 及心跳检测
- socket 断线检测 心跳检测
- 心跳包(检测不可检测断线)
- 基于netty的网络聊天室(二)——心跳检测及断线重连
- 基于netty的网络聊天室(二)——心跳检测及断线重连
- Linux下使用UDP做心跳检测(断线检测)
- openfire 用户上线和离线
- Netty 4.0 实现心跳检测和断线重连
- Netty 4.0 实现心跳检测和断线重连
- 谈下openfire心跳包检测的问题
- 心跳检测的思路及代码
- zk的心跳检测及误区.
- java基础学习(五)访问权限控制
- 基于XMPP协议(openfire服务器)的消息推送实现
- 循环中的闭包
- Poweroj 1194(dp背包问题)
- A Boring Game
- Openfire 用户离线、断线 及心跳检测
- Hadoop组件配置
- 通过netcraft查询一个网站的服务信息
- 我的程序员之路(英语的学习)
- IONIC 自动更新APP版本
- Python自动运维系列:每天凌晨定时执行特定任务
- [勇者闯LeetCode] 35. Search Insert Position
- zscat分布式框架单机版代码生成crud
- 【ionic App问题总结系列】ionic 如何更新app版本