0

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

其 'subscription' 属性值为 'to',

根据jabber协议意味着:

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

但是当我登录对方账号时,

我可以看到机器人在线,

为什么会这样?

jabber协议现在乱了吗?

4

2 回答 2

3

如果你说“我的机器人订阅了 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'/>
于 2009-06-04T16:28:48.617 回答
1

我已经有一段时间没有使用 XMPP 了,但是快速重新阅读规范让我认为您混淆了“to”的含义。如果用户在机器人的名单上被列为“to”,那么这意味着用户正在关注机器人的存在,而不是相反。“来自”意味着机器人正在关注——或将接收来自——用户帐户的出席信息节。

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

于 2009-06-03T04:05:27.307 回答