我的jabber机器人的一个联系人,
其“订阅”属性值为“”to“”,
根据jabber协议,这意味着:
*机器人已订阅了对方的在线状态,但对方尚未订阅我的机器人的在线状态。*
但是当我登录到对方的账户时,
我能看到机器人在线了,
为什么会这样呢?
jabber协议现在是混乱的吗?
发布于 2009-06-04 16:28:49
如果你说"My bot make a subscription TO shore“或"Shore has a subscription FROM my bot","from”和"to“会更有意义。
因此,如果机器人的花名册中有:
<item jid='shore@example.com' subscription='to'/>然后机器人将看到shore的存在,但shore将不会看到bot的存在,假设shore的花名册具有:
<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'/>发布于 2009-06-03 04:05:27
我已经有一段时间没有使用XMPP了,但是快速地重读一下这个规范,我会认为您把"to“的意思搞混了。如果用户在机器人的花名册上被列为"to“,那么这意味着用户正在关注机器人的存在,而不是相反。" from“表示机器人正在关注--或将从--用户帐户接收到在线状态节。
你知道用户的花名册是什么样子的吗?如果同步了,则用户的花名册中应该将机器人列为"from“。
https://stackoverflow.com/questions/942684
复制相似问题