2017-03-16 109 views
0

对于会话恢复我遵循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分钟。任何人都可以帮我解决这个问题吗?

+0

您必须启用服务器端或平mod_ping到服务器上的时间间隔,TCP/IP连接关闭掉。 –

回答

0

您可以使用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)