2

我正在使用 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 并没有让他们逃脱。

4

1 回答 1

1

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

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

更新:为了消除我对上述内容的任何混淆(见评论)......

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

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

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

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

<presence xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>
于 2012-03-07T14:41:49.140 回答