博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Openfire 用户离线、断线 及心跳检测
阅读量:6360 次
发布时间:2019-06-23

本文共 1420 字,大约阅读时间需要 4 分钟。

hot3.png

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的整个连接过程,它提供的api都实现了心跳这些操作就不需要我们自己去开发,还提供了断链的各种事件给开发者。所以整个的过程是很简单,openfire是基于MINA,java开发的,MINA是一个网络应用程序框架,使用nio,至于nio就是new io,新的io,不阻塞的io,如果大家想了解可以去搜索一下资料很多。

转载于:https://my.oschina.net/u/1261308/blog/386620

你可能感兴趣的文章
python之基本数据类型及深浅拷贝
查看>>
将bootstrap弹出框的点击弹出改为鼠标移入弹出
查看>>
SKF密码设备研究
查看>>
数据对象映射模式(通过工厂模式和注册树模式)v2
查看>>
4939 欧拉函数[一中数论随堂练]
查看>>
MySQL笔记(一)
查看>>
spring boot 包jar运行
查看>>
18年秋季学习总结
查看>>
Effective前端1:能使用html/css解决的问题就不要使用JS
查看>>
网络攻防 实验一
查看>>
由莫名其妙的错误开始---浅谈jquery的dom节点创建
查看>>
磨刀-CodeWarrior11生成的Makefile解析
查看>>
String StringBuffer StringBuilder对比
查看>>
bootstrap随笔点击增加
查看>>
oracle 中proc和oci操作对缓存不同处理
查看>>
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
面试题目3:智能指针
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>