使用 PHP 连接到 BOSCH 服务后,完整的孩子是空的
Posted
技术标签:
【中文标题】使用 PHP 连接到 BOSCH 服务后,完整的孩子是空的【英文标题】:fulljid is empty after connection to BOSH service with XMPHP 【发布时间】:2012-11-29 17:37:02 【问题描述】:我正在尝试通过 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());
我得到了 rid 和 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'? 我错过了什么?
【问题讨论】:
附加到会话时,只会返回 ATTACHED 状态。您可以通过为 xmlOutput 和 xmlInput 提供函数来检查正在发送和接收的内容。类似 conn.xmlOutput = function (body) console.log(body); 谢谢。我只是认为这种行为符合预期。 【参考方案1】:好的,解决了,我看到 XMPPHP 库根本没有在 openfire 服务器上创建会话,所以我为 XMPP 类编写了一个简单的测试并创建了会话,并为 XMPP_BOSH 类创建了会话'不管理创建一个。然后我在这里看到了问题报告:http://code.google.com/p/xmpphp/issues/detail?id=47comment no.9 工作,它通过将processUntil()
函数从 XMLStream.php 复制到 BOSH.php 解决了这个问题,仍然无法弄清楚为什么这是有效的。然后我发现我在 openfire 服务器上为用户设置的一些密码也有一个重叠的错误。这些密码包含这些! # % ^
字符,由于某种原因,XMPP_BOSH 发送的密码已损坏或更改,所以我得到了 Auth Failed 异常。更改密码解决了这个问题,我现在可以附加到使用 Strophe.js 库创建的会话 XMPPHP。
【讨论】:
以上是关于使用 PHP 连接到 BOSCH 服务后,完整的孩子是空的的主要内容,如果未能解决你的问题,请参考以下文章