0

我正在尝试通过 XMPHP 预绑定 XMPP 会话并将 rid/sid/jid 传递给 strophe 客户端以附加到会话。

连接代码在这里:

$conn = new CIRCUIT_BOSH('server.com', 7070, $username, $pass, $resource, 'server.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE);
$conn->autoSubscribe();

try{
  $conn->connect('http://xmpp.server.com/http-bind', 1, true);
  $log->lwrite('Connected!');
}catch(XMPPHP_Exception $e){
  die($e->getMessage());
}

我正在摆脱和 sid,但 $conn 对象中的 fulljid 保持为空,我看不到在我的 openfire 管理控制台上启动了会话。

如果我通过使用给定资源手动创建 jid 并将 jid/rid/sid 传递给 strophe 以在附加中使用,我将获得 ATTACHED 状态并且我看到客户端对 BOSH ip 的调用但我仍然没有看到会话并且我无法使用连接。

Strophe 客户端代码:

要求准备好文件:

var sid = $.cookie('sid');
var rid = $.cookie('rid');
var jid = $.cookie('jid');
    $(document).trigger('attach', {
      sid: sid,
      rid: rid,
      jid: jid,
    });

$(document).bind('attach', function (ev, data) {

    var conn = new Strophe.Connection(
        "http://xmpp.server.com/http-bind");

    conn.attach(data.jid, data.sid, data.rid, function (status) {
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        } else if (status === Strophe.Status.ATTACHED){
            $(document).trigger('attached');
        }
    });

    Object.connection = conn;

}); 

我认为问题始于未正确创建会话的 XMPPHP 端。'attached' 被触发但从未'connected',是否应该发送状态'connected'?我错过了什么?

4

1 回答 1

0

好的,解决了,我看到 XMPPHP lib 根本没有在 openfire 服务器上创建会话,所以我为 XMPP 类编写了一个简单的测试并创建了会话,并为 XMPP_BOSH 类没有管理创建一个。然后我在这里看到了问题报告:http ://code.google.com/p/xmpphp/issues/detail?id= 47 comment no.9 有效,它通过将processUntil()XMLStream.php 中的函数复制到 BOSH 来解决问题.php,仍然无法弄清楚为什么这是有效的。然后我发现我在 openfire 服务器上为用户设置的一些密码也有一个重叠的错误。这些密码包含这些 ! # % ^字符,由于某种原因,XMPP_BOSH 发送的密码已损坏或已更改,因此出现 Auth Failed 异常。更改密码解决了这个问题,我现在可以附加到使用 Strophe.js 库创建的会话 XMPPHP。

于 2012-11-30T02:21:11.217 回答