XMPP 与 Strophe 的客户端之间的 IQ 交换
Posted
技术标签:
【中文标题】XMPP 与 Strophe 的客户端之间的 IQ 交换【英文标题】:XMPP's IQ exchange between clients with Strophe 【发布时间】:2012-03-26 09:03:37 【问题描述】:所以我有 2 个浏览器正在运行,它们都具有相同的页面。在此页面中,您可以使用帐户登录服务器。
连接是用 Strophe 建立的。一切都是 html 和 javascript。
现在我已经设法建立了一个聊天(在两个浏览器之间,每个浏览器都使用不同的用户登录)。这是完美的工作。
我现在想要实现的是从另一个用户向一个用户发送一个 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'>以上是关于XMPP 与 Strophe 的客户端之间的 IQ 交换的主要内容,如果未能解决你的问题,请参考以下文章
使用 strophe.js 在 eJabberd 服务器上获取具有名称的特定花名册
XMPP Web 客户端(使用 strophe.js)花时间连接 ejabberd 服务器