XMPP 与 Strophe 的客户端之间的 IQ 交换

Posted

技术标签:

【中文标题】XMPP 与 Strophe 的客户端之间的 IQ 交换【英文标题】:XMPP's IQ exchange between clients with Strophe 【发布时间】:2012-03-26 09:03:37 【问题描述】:

所以我有 2 个浏览器正在运行,它们都具有相同的页面。在此页面中,您可以使用帐户登录服务器。

连接是用 Strophe 建立的。一切都是 htmljavascript

现在我已经设法建立了一个聊天(在两个浏览器之间,每个浏览器都使用不同的用户登录)。这是完美的工作。

我现在想要实现的是从另一个用户向一个用户发送一个 IQ。两者都在状态栏中说他们正在接收 IQ(一​​个是“得到请求”,另一个是“得到结果”)

现在,我使用以下方法创建 iq:

    var iq = $iq(type: 'get', to: this.receiver).c('query', xmlns: 'http://jabber.org/protocol/pubsub#retrieve-subscriptions');
    XmppObject.xmpp.connection.sendIQ(iq);

这是在一个可以通过按下按钮调用的函数中设置的。 监听器的构建如下:

    $(XmppObject.xmpp).bind("iq", function(event, data)
    addToStatus('Received an iq: \n');
    handlePong(data.iq);
);

handlePong 为:

    function handlePong(msg)

    var objMsg = $(msg);
    var from = objMsg.attr('from');
    var type = objMsg.attr('type');
    var id = objMsg.attr('id');
    var text = 'Received iq from ' + from + ' with id ' + id + ' and type ' + type + '\n\n';
    addToStatus(text);

现在,当 client1 向 client2 发送 IQ 时,结果如下:

客户端1: Received iq from client2@domain with id pingPong and type result

客户端2:

现在有没有办法在client2的状态中显示他收到了初始请求?

【问题讨论】:

伙计,您的代码有很多明显错误的地方,我不知道从哪里开始。您是否真的收到其他客户收到 iq 的响应,因为他不应该... 我也不太明白这个问题。 client1 和 client2 的作用是什么?最后一行中的“初始请求”是什么意思? @ggozad:哇,真的有那么糟糕吗?这些只是 sn-ps,但我希望用它来展示它。除此之外,它也是一个原型,而不是最终版本。回答另一个问题:是的,client1 收到结果 IQ (type:result)。 @MattJ :客户端 1 向客户端 2 发送 IQ。 Client2 然后发送结果 IQ。这部分有效。但是client2并没有说他得到了client1的请求。希望这能让目标更加明确。 @MattJ 到 parse 节用 jQuery 很棒。要注册处理程序,我会使用 Strophe 的 api,这就是它的用途 【参考方案1】:

您需要:

用你自己的命名空间构造一个iq,你不能简单地回收现有的。它会起作用,但这是完全错误的。 在 Strophe 的连接上添加一个处理程序来处理这种类型 if iq.你不能通过使用 jQuery 的绑定来做到这一点。您应该在连接上使用addHandler

我能找到的最简单的例子就是 strophe 插件的ping 实现,参见https://github.com/metajack/strophejs-plugins/blob/master/ping/strophe.ping.js

【讨论】:

对不起,client2 仍然没有给出他正在发回结果 IQ 或者他甚至得到 IQ 的迹象 重写并重试。 这是我收到的:RECV: jabber.org/protocol/httpbind'><iqxmlns='jabber:client' from='client1@domain' to='client2@domain/138673974513332025296815' type='错误'id='9848:ping'> K,搞定了,显然你真的需要添加一个来源;)感谢@ggozad 的帮助

以上是关于XMPP 与 Strophe 的客户端之间的 IQ 交换的主要内容,如果未能解决你的问题,请参考以下文章

使用 strophe.js 在 eJabberd 服务器上获取具有名称的特定花名册

使用 strophe 在 xmpp 中传输文件

XMPP Web 客户端(使用 strophe.js)花时间连接 ejabberd 服务器

通过 Strophe 附加(未连接)时是不是应该向 XMPP 服务器广播状态?

XMPP strophe 连接附加过程失败

使用 XMPP Strophe BOSH 刷新页面后客户端自动变为不可用