【问题标题】:Determine if an XMPP user is online or not确定 XMPP 用户是否在线
【发布时间】:2011-04-13 20:38:01
【问题描述】:

我正在使用xmpppy 库编写一个可以与用户聊天的XMPP 客户端。它有自己的 XMPP 用户帐户,需要知道给定用户是否在线。但是,有关如何执行此操作的文档有点稀疏。你会推荐什么?

到目前为止,我看到的唯一解决方案是在 XMPP 服务器启动之前启动一个守护进程并监控所有发送的状态消息 - 如果用户发送了“我”,则称他们在线m online”类型的消息,但不是相应的“我正在注销”消息。但是,一般来说,作为 XMPP 的新手,我认为会有更好的方法来做到这一点。

【问题讨论】:

标签: python xmpp xmpppy


【解决方案1】:

简单的方法是支持“订阅”状态消息——这可以让其他用户通过“订阅”尝试检查您当前是否在场(如果他们还不知道)。查看this useful guide 开始使用,the standard 了解更多重要细节(尤其是保护您的隐私,如果需要,防止来自您不认识的用户的订阅请求)。

【讨论】:

    【解决方案2】:

    基本上有三种方式可以连接到 XMPP 服务器:作为客户端(您已经完成)、作为组件和作为另一台服务器。服务器到服务器类型 (s2s) 只是一个联合连接,非常类似于邮件服务器相互交换电子邮件的方式。

    Alex 描述了客户如何跟踪存在情况。 XMPP 要求我批准您可以接收我的状态信息,反之亦然。对于您的机器人,这意味着您可以跟踪最终用户需要接受您的在线请求的在线用户。这也意味着您可以响应用户的状态请求,并让他们了解您的机器人是否启动。

    最后一种方式是作为受信任的组件,并且仅在您运行服务器时才有效。即,如果您尝试在 jabber.org 服务器上执行此操作,那么您就不走运了,因为您没有运行该服务器。 upsdie 是你可以访问 XMPP 服务器的内部,比如拉取每个在线的人的列表。缺点是您的组件/机器人实现对于每个服务器实现都会有所不同。

    【讨论】:

    • 是的,实际上我最终选择了后者——我只是轮询 ejabberd 以找出所有在线的人,因为这比让客户跟踪它并让我的程序轮询它要容易得多。总的来说,作为 XMPP 的新手,我认为通过 xmpppy 库可以更简单地完成此操作,但最终并非如此 - 不过答案很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2010-12-13
    相关资源
    最近更新 更多