我正在使用该xmpppy
库编写一个可以与用户聊天的 XMPP 客户端。它有自己的 XMPP 用户帐户,需要知道给定用户是否在线。但是,有关如何执行此操作的文档有点稀疏。你会推荐什么?
到目前为止,我看到的唯一解决方案是在 XMPP 服务器启动之前启动一个守护进程并监视所有发送的状态消息 - 如果用户发送了“我在线”,则称他们在线-type 消息,但不是相应的“我正在注销”消息。但是,总的来说,作为 XMPP 的新手,我认为会有更好的方法来做到这一点。
简单的方法是支持“订阅”状态消息——这让另一个用户通过“订阅”尝试检查您当前是否在场(如果他们还不知道)。查看这个有用的指南以开始使用,以及更多重要细节的标准(尤其是关于保护您的隐私,如果需要,防止来自您不认识的用户的订阅请求)。
基本上有三种方法可以连接到 XMPP 服务器:作为客户端(您已经完成)、作为组件和作为另一台服务器。服务器到服务器类型 (s2s) 只是一个联合连接,非常类似于邮件服务器相互交换电子邮件的方式。
亚历克斯描述了客户如何跟踪存在。XMPP 要求我批准您可以接收我的状态信息,反之亦然。对于您的机器人,这意味着您可以跟踪最终用户需要接受您的在线请求的在线用户。这也意味着您可以响应用户的出席请求,并让他们了解您的机器人是否启动。
最后一种方式是作为受信任的组件,并且仅在您运行服务器时才有效。即,如果您尝试在jabber.org服务器上执行此操作,那么您很不走运,因为您没有运行该服务器。upsdie 是你可以访问 XMPP 服务器的内部,比如拉取每个在线的人的列表。缺点是您的组件/机器人实现对于每个服务器实现都会有所不同。