【问题标题】:What's the proper XMPP client response to a <presence type=unsubscribed...> stanza?XMPP 客户端对 <presence type=unsubscribed...> 节的正确响应是什么?
【发布时间】:2009-03-03 05:11:50
【问题描述】:

当我从服务器上的名册中手动删除联系人时,服务器发送给我的信息如下:

'<iq type="set" id="183-87" to="foo@edmund.local/hydra"><query xmlns="jabber:iq:roster"><item jid="bar@yahoo.edmund.local" name="baz" ask="unsubscribe" subscription="none"><group>Buddies</group></item></query></iq>'
'<iq type="set" id="187-88" to="foo@edmund.local/hydra"><query xmlns="jabber:iq:roster"><item jid="bar@yahoo.edmund.local" name="baz" subscription="none"><group>Buddies</group></item></query></iq>'
'<presence type="unsubscribed" to="foo@edmund.local" from="bar@yahoo.edmund.local"/>'

如果我以“取消订阅”状态响应(根据 RFC 3921 我认为这是正确的),服务器会不断向我发送更多“未订阅”状态的垃圾邮件。

不管怎样,下次我的客户登录时,名册中的任何内容都没有改变。我做错了吗?

【问题讨论】:

    标签: xmpp


    【解决方案1】:

    这取决于您谈论的是哪个客户 - 是订阅者还是被订阅者。

    .

    如果客户端是订阅者,那么什么都没有:

    根据section 9.4,如果订阅者发送unsubscribe 请求,或者其他原因导致客户端被取消订阅,服务器必须确认请求/报告状态更改与unsubscribed 响应。互动到此结束。

    如果订阅者每次收到来自服务器的unsubscribed 状态通知,告诉它先前的订阅已被删除时,它都会发送另一个unsubscribe 请求,那么它永远不会结束。

    .

    如果客户端是订阅节点,则可能会发送unsubscribe 以确认允许删除订阅,但是当您在正常机制之外更改名册时,这是否仍然有效我不是当然。

    我对 9.4 中的表格的阅读是针对取消订阅期间订阅者和服务器之间的消息:

    subscriber            server             subscribee
        | -- unsubscribe --> |                    |
        |                    | -- unsubscribe --> |
        |                    | <- unsubscribed -- | (optional)
        |                    | -- unsubscribed -> |
        | <- unsubscribed -- |                    |
    

    我对@9​​87654322@ 的解读是这样的:

    subscriber            server             subscribee
        | ----- remove ----> |                    |
        |                    | -- unsubscribe --> |
        |                    | -- unsubscribed -> |
        |                    | -- unavailable --> |
        | <- unsubscribed -- |                    |
        | <-- unavailable -- |                    |
    

    任何一个客户端都不需要确认。

    【讨论】:

    • 如果 rfc 发生了变化,否决这个问题的人能否纠正或扩大答案。
    【解决方案2】:

    我太生疏了,无法直接回答你,但由于已经几个小时没有答案,所以我只是提出一个建议......

    加载 pidgin 或其他可以记录 xmlstream 的客户端,从该客户端发送取消订阅,然后复制您在日志中看到的代码。

    这将帮助您获得正确的节,或者它会识别 openfire 中的不兼容(不太可能,但谁知道)。

    【讨论】:

      猜你喜欢
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多