我一直在使用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插件并获得相同的行为。我在路障,非常感谢任何人的输入!谢谢!
答案 0 :(得分:0)
您使用的是哪台服务器?
看起来您正在尝试进行显式订阅而不是更常规的隐式PEP订阅。许多服务器仅支持隐式订阅,您可以在[node URI]+notify
信息中添加{{1}}。
此外,某些服务器有一个错误,您需要明确向刚刚订阅的用户发送状态,而不是服务器在您批准其订阅请求时正确地向他们提供当前状态。这个错误会妨碍隐式订阅。