strophe.js,我使用 attach() 来恢复 Bosh 会话,但将“状态”附加到 CONFAIL 和 DISCONNECTED

Posted

技术标签:

【中文标题】strophe.js,我使用 attach() 来恢复 Bosh 会话,但将“状态”附加到 CONFAIL 和 DISCONNECTED【英文标题】:strophe.js, I use attach() to restore a Bosh session but get 'Status' ATTACHED to CONNFAIL and to DISCONNECTED 【发布时间】:2016-06-29 19:12:36 【问题描述】:

我使用 strophe.js 构建一个简单的 IM(web)。

我有 2 个页面:index.html(用于登录)和 myChat.html(主聊天视图)。

当我通过 index.html 中的 jid 和密码登录到 openfire 服务器时

connection = new Strophe.Connection(BOSH_SERVICE);     
connection.connect($("#inputName").val()+"@openfireserver", $("#inputPassword").val(), onConnect);  

然后我将 jid,sid,rid 保存在 COOKIE 中的回调 'onConnect' 中,然后转到 myChat.html

if (status == Strophe.Status.CONNECTED)   
    console.log("success");  
    connected = true; 
    $.cookie('jid', connection.jid);
    $.cookie('sid', connection._proto.sid);
    $.cookie('rid', connection._proto.rid);
    location.href='myChat.html';
  

在 myChat.html 中,我使用 connection.attach() 来恢复 BOSH 会话。

    var jid=$.cookie('jid');
    var sid=$.cookie('sid');
    var rid=$.cookie('rid');
    connection = new Strophe.Connection(BOSH_SERVICE);
    connection.attach(jid,sid,parseInt(rid,10)+1,onConnectAttach);

首先,在回调“onConnectAttach”中,status==Strophe.Status.ATTACHED, 但是等待 1-3 分钟,状态会变成 Strophe.Status.CONNFAIL 和 Strophe.Status.CONNECTED

如果我使用 connection.connect() 重新连接服务器,它将一直保持会话。

所以我不明白我在哪里犯了错误?为什么我使用 attach() 后状态会改变?

【问题讨论】:

【参考方案1】:

知道了。

connection.attach(jid,sid,parseInt(rid,10)+1,onConnectAttach);

这是错误的,因为我浏览了一些关于“附加”功能的问题,我发现有人说“摆脱”必须加一个。

但是,根据我的测试,我不需要这样做。只是:

connection.attach(jid,sid,rid,onConnectAttach);

【讨论】:

以上是关于strophe.js,我使用 attach() 来恢复 Bosh 会话,但将“状态”附加到 CONFAIL 和 DISCONNECTED的主要内容,如果未能解决你的问题,请参考以下文章

将 Strophe.js 与 React Native 一起使用

strophe.min.js 和 strophe.js 的区别?

node.js, XMPP Strophe.js

如何使用 Strophe JS 获取 DNS SRV 记录?

使用 Xmpp、strophe.js 进行聊天应用

使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态