确定XMPP用户是否在线

5
我正在使用xmpppy库编写一个XMPP客户端,可以与用户聊天。它有自己的XMPP用户帐户,并且需要知道给定用户是否在线。然而,文档在如何做到这一点方面有些缺乏。你会推荐什么?
目前我看到的唯一解决方案是在XMPP服务器启动之前启动一个守护程序并监视发送的所有存在消息 - 然后如果用户发送了“我在线”的类型消息但没有相应的“我正在注销”消息,则说该用户在线。然而,作为对XMPP一般的新手,我认为应该有更好的方法来实现这一点。

请查看我的帖子。我已经为Facebook和Gtalk完成了这个任务。 - YogiAR
2个回答

3

一种简单的方法是支持“订阅”出席消息--这使另一个用户可以通过“订阅”尝试来检查您当前是否在线(如果他们还不知道)。 请参考这个有用的指南开始使用,以及标准文档获取更多重要细节(特别是关于如何保护您的隐私,以免受到来自未知用户的订阅请求的影响)。


1

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

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

最后一种方法是作为受信任的组件,仅在您运行服务器时才有效。即如果您尝试在jabber.org服务器上执行此操作,则无法成功,因为您没有运行该服务器。好处是您可以访问XMPP服务器的内部,例如拉取所有在线人员的列表。缺点是您的组件/机器人实现将针对每个服务器实现而不同。


是的,我最终选择了后一种方法——我只是轮询ejabberd以查找在线的所有人,因为这比让客户端跟踪它并且我的程序轮询它要容易得多。作为一个对XMPP不太熟悉的人,我认为通过xmpppy库有更简单的方法来做到这一点,但事实并非如此——不过你的回答很好! - Chris Bunch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接