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

客户端登出分为正常离线和断线,正常离线会发送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的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建独立、微服务和可扩展应用程序的开源Java框架。它简化了Spring应用程序的开发和部署过程,提供了诸多开箱即用的功能和约定,使开发者能够更加专注于业务逻辑的实现。 Openfire是一个实时协作服务器,它基于XMPP协议,提供了即时通讯功能。具体来说,Openfire可以用于创建和管理聊天室、发送和接收消息、实现在线状态管理等。 结合Spring Boot和Openfire,我们可以使用Spring Boot开发基于Openfire的应用程序。通过使用Spring Boot的自动配置和约定优于配置的特性,可以很方便地集成Openfire的功能。 首先,我们可以使用Spring Boot的起步依赖来引入Openfire的依赖项。然后,我们可以利用Spring Boot的自动配置机制来配置Openfire的相关参数,例如服务器地址、端口等。 接下来,我们可以使用Spring Boot的注解驱动开发方式来实现与Openfire交互的业务逻辑。例如,我们可以使用注解来定义消息收发的处理方法,用于处理用户发送的消息或者监听其他事件。 此外,我们还可以利用Spring Boot的其他功能来增强我们的应用程序。例如,可以使用Spring Boot的Web功能来构建一个管理界面,用于管理Openfire用户、聊天室等信息。也可以利用Spring Boot的安全功能来实现访问控制。 总之,Spring Boot和Openfire的结合可以帮助我们更方便地开发集成即时通讯功能的应用程序。通过使用Spring Boot的特性,我们可以更加简洁高效地进行开发和部署,提高开发效率和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值