openfire離線、斷線、心跳

客戶端登出分為正常離線和斷線,正常離線會發送presence 消息通知服務器,斷線則無通知發送。

  1. 正常離線:

客戶端在離線之前發送

由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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值