【问题标题】:Jabber bot - how to get presence updates?Jabber bot - 如何获取状态更新?
【发布时间】:2012-02-22 18:16:49
【问题描述】:

我正在使用以下代码连接到 xmpp 服务器(python + xmppy):

  c = xmpp.Client("localhost", debug=[])
  c.connect(("127.0.0.1", 5222))
  c.auth("test","test")
  c.sendInitPresence()
  c.send(xmpp.Presence(to="admin@localhost", typ='subscribe'))
  time.sleep(1000)

这很好用,管理员用户获取状态更新,并且在联系人中“测试”用户显示为在线。如果我在这个脚本上按 ctrl+c (当它在最后睡觉时),就会出现问题,所以它被终止了。问题是管理员用户没有从该脚本获得状态更新。

我还应该提到,管理员用户会自动接受订阅请求。

我的问题是:管理员用户如何检测到测试用户下线了。并且更改上述脚本不是一种选择,因为任何人都可以编写它并在我的 xmpp 服务器上构建一个程序。

欢迎提供有关管理员未收到状态更新或如何检测用户“测试”已离线的任何想法。

谢谢

【问题讨论】:

    标签: python linux xmpp openfire


    【解决方案1】:

    检测到端点在没有特定状态更新的情况下脱机通常由服务器处理,例如。检测到与端点通信的套接字已关闭。

    如果您只能控制客户端代码,您可以偶尔从管理客户端向其所有订阅端点发送presence probes

    【讨论】:

    • 嗨。我可以控制 XMPP 服务器,它是 openfire,如果使用上述脚本,它不会发送当前更新。它检测到用户已离线,因为如果我列出所有用户,则“测试”用户被标记为离线。只是没有状态更新。我猜“管理员”用户应该收到状态更新,因为上面的脚本将它添加到“测试”名册中 - 并且管理员自动接受订阅。所以我不知道“管理员”没有得到离线状态更新是怎么回事,但是 openfire 检测到用户“测试”已经离线。
    • 那么听起来它可能是一个 Openfire 错误。 XMPP 规范规定,如果客户端断开连接,服务器必须生成不可用状态:xmpp.org/rfcs/rfc6121.html#presence-unavailable-outbound
    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2019-10-15
    • 2020-06-10
    • 2021-08-30
    相关资源
    最近更新 更多