使用 XMPP Strophe BOSH 刷新页面后客户端自动变为不可用

Posted

技术标签:

【中文标题】使用 XMPP Strophe BOSH 刷新页面后客户端自动变为不可用【英文标题】:Client automatically went unavailable after page refresh using XMPP Strophe BOSH 【发布时间】:2013-10-09 06:22:06 【问题描述】:

我有一个网络聊天应用程序。我正在使用 BOSH、Openfire 和 Strophe。除了页面刷新时,一切都很好。我在页面刷新之前使用 cookie 保存用户信息(JID、RID、SID)。但是,当连接重置时,所有在线用户都会显示出来,但是当您按顺序向客户端发送消息时,尽管会话仍然存在,但它会自动变为 UNAVAILABLE。

编辑:

$(window).bind('onunload', function () 
    if(connection !== null)
        connection.pause();
        set_cookies();
    else
        del_cookies();
    
);

刷新后,应使用 Attach() 函数恢复连接。将显示所有在线联系人的列表,但几秒钟后它将不可用。

【问题讨论】:

您可以发布页面重新加载后的请求和响应吗? 喜实际代码或控制台流量? 【参考方案1】:

你可以通过在创建连接时保存 rid 来解决这个问题,rid 会在每个请求时更新,xmpp 服务器通常有一些窗口用于 rids,因此在 cookie 中保持 rid 更新很重要。

尝试根据 strophe 发出的每个 BOSH 请求更新 rid。 这可以通过在连接对象的 xmlOutput 方法中插入节省代码来完成:

conn.xmlOutput = function(body) 
    var rid = $(body).attr('rid');
    // save rid to cookies

【讨论】:

以上是关于使用 XMPP Strophe BOSH 刷新页面后客户端自动变为不可用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Strophe.js 建立 WebSocket 连接

Strophe 无法通过 BOSH 服务器连接到 Facebook

使用 Strophe js (CONNFAIL) 连接到 Prosody XMPP 服务器

如何使用 XMPP 和 BOSH 实现 Facebook 聊天

XMPP ejabberd 带内注册:接收 xml BOSH 未启动,即使它是

可以使用 Strophe 在 java(jvm) 上与 Bosh Manager 建立 Bosh 连接吗?