我的jabber机器人的联系人之一,
其 'subscription' 属性值为 'to',
根据jabber协议意味着:
****机器人已经订阅了对方的在线状态,但是对方没有订阅我的机器人。****
但是当我登录对方账号时,
我可以看到机器人在线,
为什么会这样?
jabber协议现在乱了吗?
如果你说“我的机器人订阅了 TOshore”或“Shore 订阅了我的机器人”,“from”和“to”会更有意义。
所以,如果机器人的名单有:
<item jid='shore@example.com' subscription='to'/>
然后机器人会看到shore的存在,但shore不会看到机器人的存在,假设shore的名册有:
<item jid='bot@example.com' subscription='from'/>
由于网络问题等原因,这些状态可能会不同步。在这些情况下,解决问题的最简单方法是删除项目(最终应该有效地删除另一侧的项目),然后重新添加(有关详细信息,请参阅RFC 3921bis,第 2.5.1 节):
<iq from='bot@example.com/background'
id='delete_1'
type='set'>
<query xmlns='jabber:iq:roster'>
<item jid='shore@example.com' subscription='remove'/>
</query>
</iq>
<presence type='subscribe'
from='bot@example.com/background'
to='shore@example.com'/>
要记住的是,即使订阅方向是所示的,机器人也可能会向岸发送定向存在,在这种情况下,即使他没有订阅机器人,岸也会看到两者的存在。检查 bot 的协议日志,您可能会看到如下内容:
<presence to='shore@example.com'/>
我已经有一段时间没有使用 XMPP 了,但是快速重新阅读规范让我认为您混淆了“to”的含义。如果用户在机器人的名单上被列为“to”,那么这意味着用户正在关注机器人的存在,而不是相反。“来自”意味着机器人正在关注——或将接收来自——用户帐户的出席信息节。
你知道用户名册是什么样的吗?如果事情已同步,则用户名册应将机器人列为“来自”。