我正在使用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并没有让他们失败。
答案 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>