strophe.js - 消息不在chrome上传递

时间:2012-03-06 17:10:53

标签: xmpp ejabberd strophe

我正在使用Strophe.js创建自定义xmpp聊天应用程序。浏览器和桌面客户端(Adium)之间的通信非常有效。我可以通过浏览器向Adium和Adium发送消息到浏览器。在某些时候浏览器与浏览器之间的通信存在问题,因为消息已发送但未传送。它似乎只是谷歌浏览器问题。

有趣的是< presence>节发送并送达。我们使用ejabberd作为服务器守护进程。

这是我从一个帐户发送的存在节:

<presence type="away" xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>

和我收到的另一个:

<presence xmlns="jabber:client" from="test1@domain.com/3917283126133167196759537" to="test2@domain.com/1563391996133167110798391" type="away">
    <show>away</show>
    <status/>
</presence>

我发送的消息节:

<message from="test1@domain.com/267172122813316722921543" to="test2@domain.com" type="chat" id="4915" xmlns="jabber:client">
    <active xmlns="http://jabber.org/protocol/chatstates" />
    <body>Testing...</body>
</message>

并且Chrome上没有收到任何内容......

编辑: 问题在于逃避一些角色。由于安全问题,Chrome并没有让他们失败。

1 个答案:

答案 0 :(得分:1)

您初次出席的type="away"无效。省略可用状态的“类型”属性。当你离线时设置type="unavailable"

由于您的状态无效,因此您未被标记为可用,并且您将不会收到任何发送给您的裸JID的消息。

更新:要清除上述内容的任何混淆(请参阅评论)......

此节的'type'属性无效:

<presence type="away" xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>

否则很好。客户端可以发送,可用和不可用两种类型的存在。标准可用状态没有“类型”属性。不可用的状态为type="unavailable"。用户的实际状态(离开等)通过<show/><status/>元素发出信号,而不是'type'属性。

要使上述节成为有效的可用状态,只需删除type="away"

即可
<presence xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>