我在让 Openfire 向与用户 jid 关联的所有用户资源发送邀请消息时遇到问题。我正在使用Openfire(3.9.3)和Strophe(1.1.3)。
用户 jid 在 openfire 上登录了 2 个资源(例如 userA@chat.mychatserver.com/e1ef0b84、userA@chat.mychatserver.com/fa51aad7)。
我已经向用户(即用户A)发送了MUC邀请消息以加入房间。
<?xml version="1.0"?>
<message xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client" from="chatRoom@se.dev.openfire" to="userA@dev.openfire"
version="1.0">
<x xmlns="http://jabber.org/protocol/muc#user">
<invite from="userB@dev.openfire"/>
</x>
<x xmlns="jabber:x:conference" jid="chatRoom@dev.openfire"/>
</message>
我希望邀请被发送到两个资源(例如 userA@chat.mychatserver.com/e1ef0b84、userA@chat.mychatserver.com/fa51aad7),但它似乎只发送到上次登录的资源。例如,如果我以用户 A 身份登录手机,然后以用户 A 身份登录笔记本电脑,则邀请将仅发送给笔记本电脑用户。
Openfire 似乎正确地将正常的 xmpp 消息路由到两个用户资源,我原本希望 muc 邀请以相同的方式处理。
有谁知道这是否可能?
谢谢史蒂夫
组邀请也被视为普通消息,应路由到所有连接的资源。
但是,为了将消息路由到所有连接的资源,Openfire 具有以下逻辑:
选择具有最高状态优先级的会话,如果没有会话符合条件,则消息将存储在脱机存储中,如果找到具有相同优先级的 1 个以上会话,则 Openfire 将变得更加智能;)即检查"路由.所有资源"属性的值。
如果 "route.all-resources" 为 true,则消息将路由到所有这些选定的会话,如果 value 为 false,则它根据显示值(聊天、可用、离开、xa)对会话进行排序,并在上次活动时间再次对结果进行排序,最后选择第一个结果并将消息路由到该会话。
注意:根据 XEP-0045,从用户 B 邀请用户 A 的 XML 采用以下形式:
<message
from='userB@dev.openfire'
to='chatRoom@se.dev.openfire'>
<x xmlns='http://jabber.org/protocol/muc#user'>
<invite to='userA@dev.openfire'>
<reason>
Hey UserA, this is the place for all good witches!
</reason>
</invite>
</x>
</message>
然后 XMPP 服务器(在本例中为 Openfire)必须提供发送 XML:
<message
from='chatRoom@se.dev.openfire'
to='userA@dev.openfire'>
<x xmlns='http://jabber.org/protocol/muc#user'>
<invite from='userB@dev.openfire'>
<reason>
Hey UserA, this is the place for all good witches!
</reason>
</invite>
<password>xyz</password>
</x>
</message>
PS:另一种方式是直接邀请(不像XEP-0045那样由房间调解),见 http://xmpp.org/extensions/xep-0249.html