我正在尝试使用javascript与我的ejabberd服务器创建与XMPP的连接,我可以在页面加载时建立连接,并且在单击断开连接按钮时能够断开连接。
现在的问题是,连接是活的,如果用户意外刷新页面,那么我的javascript正在尝试再次连接,并回应我得到的。 (这只是因为以前的连接可能仍然存在)
<body xmlns='http://jabber.org/protocol/httpbind'>
<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<not-authorized/>
</failure>
</body>
过了一段时间,如果我再次刷新页面,那么连接将成功建立,那么如果页面被意外刷新以便用户获得无缝连接,我该如何重置连接。
答案 0 :(得分:3)
如果您希望在页面刷新期间保持连接,请将jid
,sid
和rid
变量以及所需的任何其他状态保存在sessionStorage之类的内容中。然后,您可以使用attach()
恢复XMPP会话。
答案 1 :(得分:0)
我猜您使用相同的JID登录,这是不允许的。您需要为JID设置随机资源以确保没有冲突。因此,不应使用JID user@domain
记录用户,而应使用JID user@domain/some_random_resource
。
另外,作为一个原则问题,你也可以听onbeforeunload
并断开连接。这不适用于基于webkit的浏览器,但可以与其他浏览器一起使用。