jabber协议问题
Posted
技术标签:
【中文标题】jabber协议问题【英文标题】:jabber protocol problem 【发布时间】:2009-06-03 01:18:37 【问题描述】:我的jabber机器人的联系人之一,
其'subscription'属性值为'to',
根据jabber协议表示:
****机器人已订阅对方在线状态, 但是对方没有订阅我的机器人。****
但是当我登录对方账号时,
我可以看到机器人在线,
为什么会这样?
jabber 协议现在乱了吗?
【问题讨论】:
你应该也标记这个 XMPP。 【参考方案1】:如果您说“我的机器人订阅了 TOshore”或“Shore 订阅了 FROM 我的机器人”,“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'/>
要记住的是,即使订阅方向是所示的,机器人也可能会向岸发送定向存在,在这种情况下,即使他没有订阅机器人,岸也会看到两者的存在.检查 bot 的协议日志,您可能会看到如下内容:
<presence to='shore@example.com'/>
【讨论】:
好话!你说当网络问题之类的时候,快速修复是在“双方”删除然后重新添加。但实际上,对方是用户,所以似乎有点不适用?还有其他解决方案吗?跨度> 如果您从您的一侧移除,它应该从另一侧移除足以修复问题。我在回答中为此添加了协议示例。 谢谢乔!还有一个问题是:有时如果对方第一次拒绝接受你的订阅,以后的订阅将永远无法工作,如何解决? 您可以随时删除并重新添加,但请记住,如果您经常这样做,您订阅的人会认为您是垃圾邮件发送者。【参考方案2】:我已经有一段时间没有使用 XMPP 了,但是快速重新阅读规范让我认为您混淆了“to”的含义。如果用户在机器人的名单上被列为“to”,那么这意味着用户正在关注机器人的存在,而不是相反。 “from”表示机器人正在关注——或将接收来自——用户帐户的出席信息节。
您知道用户名册是什么样的吗?如果事情已同步,则用户名册应将机器人列为“来自”。
【讨论】:
哦,你是对的,我搞错了。但是通过我的机器人账号,我可以在线看到用户账号,并且我已经多次重新订阅了那个用户账号,仍然没有效果,比如说,“订阅”仍然是“到”。以上是关于jabber协议问题的主要内容,如果未能解决你的问题,请参考以下文章
允许 ejabberd_service(Jabber 组件协议)修改用户名册
关于 python Jabber、Twisted、XMLRPC 和 SCP 的简单问题 [关闭]