我的jabber机器人的一个联系人,
其“订阅”属性值为“到”,
根据jabber协议的意思:
****机器人订阅了对方的在线状态, 但另一方没有订阅我的机器人。****
但是当我登录对方帐户时,
我可以看到机器人在线,
为什么会这样?
jabber协议现在处于混乱状态吗?
答案 0 :(得分:3)
如果你说“我的机器人订阅了岸上”或“我的机器人订阅了我的机器人”,“从”和“到”将更有意义。
所以,如果机器人的名单有:
<item jid='shore@example.com' subscription='to'/>
然后机器人会看到岸的存在,但岸上将看不到机器人的存在,假设岸的名单有:
<item jid='bot@example.com' subscription='from'/>
由于网络问题等原因,这些状态可能会失去同步。在这些情况下,解决问题的最简单方法是删除项目(最终应该有效删除另一方的项目),然后重新添加(有关详细信息,请参阅RFC 3921bis, section 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'/>
要记住的是,即使订阅是在显示的方向,机器人可能会发送定向存在到岸上,在这种情况下,即使他没有订阅机器人,岸也会看到两者的存在。检查机器人的协议日志,您可能会看到类似的内容:
<presence to='shore@example.com'/>
答案 1 :(得分:1)
自从我使用XMPP以来已经有一段时间了,但是快速重新阅读规范让我觉得你有“混淆”的含义。如果用户在机器人的名单上被列为“to”,则表示用户正在跟踪机器人的存在,而不是相反。 “from”表示机器人正在关注 - 或将从用户帐户接收存在节。
你知道用户的名单是什么样的吗?如果事情同步,用户的名单应该将机器人列为“来自”。