如何恢复会话 - ejabberd
问题描述:
对于会话恢复我遵循xep-0198(XMPP框架中的流管理)。它只能工作300秒。如果用户没有打开聊天应用的时间超过300秒,则即使我增加了超时间隔,连接也会自动丢失。如何恢复会话 - ejabberd
我做了以下到YML文件:
listen:
-
port: 5222
module: ejabberd_c2s
resend_on_timeout: if_offline
stream_management: true
resume_timeout: 10000
max_resume_timeout: 10000
在代码:(SWIFT),同时登录到App
xmppStreamManagement = XMPPStreamManagement(storage: XMPPStreamManagementMemoryStorage(), dispatchQueue: DispatchQueue.main)
xmppStreamManagement?.autoResume = true
xmppStreamManagement?.addDelegate(self, delegateQueue: DispatchQueue.main)
xmppStreamManagement?.activate(stream)
认证后:
xmppStreamManagement?.enable(withResumption: true, maxTimeout: 10000)
func canResumeStream() -> Bool{
return true
}
func xmppStreamManagement(_ sender: XMPPStreamManagement!, wasEnabled enabled: DDXMLElement!){
print("enabled")
}
func xmppStreamManagement(_ sender: XMPPStreamManagement!, wasNotEnabled failed: DDXMLElement!){
print("not enabled")
}
func supportsStreamManagement() -> Bool{
return true
}
我得到了以下来自服务器的结果:
<enabled xmlns="urn:xmpp:sm:3" resume="true" max="10000" id="g2gCbQAAABY1NzQ5MzQwOTgwNjk2OTY4NTcxMjE4aANiAAAF0WIACjagYRg="/>
但会话过期,如果我保持用户闲置超过5分钟。任何人都可以帮我解决这个问题吗?
答
您可以使用XMPPPingModule(XEP-0199:XMPP Ping)使会话保持活动状态。
例子:
let xmppPing = XMPPPing()
xmppPing?.respondsToQueries = true
xmppPing?.activate(stream)
let xmppAutoPing = XMPPAutoPing()
xmppAutoPing?.pingInterval = (yourTimeInterval) * 60
xmppAutoPing?.pingTimeout = pingTimeOutTime
xmppAutoPing?.activate(stream)
您必须启用服务器端或平mod_ping到服务器上的时间间隔,TCP/IP连接关闭掉。 –