【问题标题】:strophe.js - messages are not delivered on chromestrophe.js - 消息未在 chrome 上传递
【发布时间】:2012-03-24 05:07:36
【问题描述】:

我正在使用 Strophe.js 创建自定义 xmpp 聊天应用程序。浏览器和桌面客户端 (Adium) 之间的通信完美运行。我可以通过浏览器向 Adium 发送消息,从 Adium 向浏览器发送消息。在某些时候浏览器-浏览器通信仍然存在问题,因为消息已发送但未传递。看来这只是 Google Chrome 的问题。

有趣的是 节可以很好地发送和传递。我们使用 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 没有让他们逃脱。

【问题讨论】:

  • 你能告诉我这些字符有什么问题吗?我在旁遮普语中使用 strophe。我只收到第一条消息,但没有收到后面的消息。消息已发送,但 Chrome 未收到任何消息。 jabber.org/protocol/chatstates"> 这是测试.. jabber.org/protocol/archive">
  • @NitishBorade 你确定什么都没收到吗?听起来侦听器函数在第一条消息后没有返回true

标签: xmpp ejabberd strophe


【解决方案1】:

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

由于您的存在无效,您没有被标记为可用,并且您不会收到任何发送给您的裸 JID 的消息。

更新:为了消除我对上述含义的任何混淆(参见 cmets)...

本节的“类型”属性无效:

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

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

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

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

【讨论】:

  • 很明显,我最初的存在节是活动的/可用的。尽管如此,这并没有什么区别,因为“离开”不应该让用户无法接收消息。
  • 对不起,你误会了。您的初始状态无效 - 标记上的“类型”属性不应存在。 标签可能具有的唯一有效“类型”是“不可用”,否则它是可用的存在。其余的节都很好。有关规范,请参阅 xmpp.org/rfcs/rfc6121.html#presence-initial-gen
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
相关资源
最近更新 更多