jabber协议问题

时间:2009-06-03 01:18:37

标签: protocols xmpp

我的jabber机器人的一个联系人,

其“订阅”属性值为“到”,

根据jabber协议的意思:

****机器人订阅了对方的在线状态, 但另一方没有订阅我的机器人。****

但是当我登录对方帐户时,

我可以看到机器人在线,

为什么会这样?

jabber协议现在处于混乱状态吗?

2 个答案:

答案 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”表示机器人正在关注 - 或将从用户帐户接收存在节。

你知道用户的名单是什么样的吗?如果事情同步,用户的名单应该将机器人列为“来自”。