strophe.js PEP处理程序没有正确附加

时间:2011-07-15 00:32:04

标签: javascript xmpp publish-subscribe strophe pep

我一直在使用PEP插件(在这里找到:https://github.com/flosse/strophejs-plugins/blob/master/pep/strophe.pep.js)连接到用户节点但是我遇到了一些麻烦。当我的连接块被调用时,我会执行以下操作:

XMPP.connection.send($pres());
XMPP.getRoster();
XMPP.connection.addHandler(XMPP.getPresence, null, "presence");

当我从我尝试访问的节点(因此具有双向订阅)的JID收到订阅后,我执行:

XMPP.connection.pep.subscribe(JID, node,
function(){console.log("SUCCESS: Successfully subscribed to " + JID + "'s node " + node);},
function(){console.log("FAILURE: Unsuccessfully subscribed to " + JID + "'s node " + node);},
XMPP.onMessage,
true);

JID和节点都有效。我在控制台中收到SUCCESS但是没有正确附加事件处理程序onMessage。我有调试集,所以我可以看到传入和传出的节,我没有从节点收到任何东西(我知道定期发布)。我不太清楚为什么会这样。

如果我从连接的块中删除所有内容,只需从Web控制台手动创建双向订阅,并在现在为空的块中添加XMPP.connection.pep.subscribe,它就可以正常工作。

我尝试过多个PEP和pubsub插件并获得相同的行为。我在路障,非常感谢任何人的输入!谢谢!

1 个答案:

答案 0 :(得分:0)

您使用的是哪台服务器?

看起来您正在尝试进行显式订阅而不是更常规的隐式PEP订阅。许多服务器仅支持隐式订阅,您可以在[node URI]+notify信息中添加{{1}}。

此外,某些服务器有一个错误,您需要明确向刚刚订阅的用户发送状态,而不是服务器在您批准其订阅请求时正确地向他们提供当前状态。这个错误会妨碍隐式订阅。