2010-09-17 64 views
4

我正在使用xmpppy库来编写可与用户聊天的XMPP客户端。它有自己的XMPP用户帐户,需要知道给定的用户是否在线。但是,如何做到这一点,文档有点稀疏。你会推荐什么?确定XMPP用户是否在线

到目前为止,我见过的唯一解决方案是在XMPP服务器启动之前启动一个守护程序,并监控发送的所有状态消息 - 然后如果用户发送了“I '在线'类型的消息,但不是相应的“我正在注销”消息。但是,对于XMPP来说一般来说是新手,我认为会有更好的方法来做到这一点。

+0

http://stackoverflow.com/questions/5300912/how-to-list-only-online-users-on-facebook-with-xmpp-framework 检查我的职务。我已经完成了facebook和gtalk – Rakesh 2012-06-11 21:09:59

回答

2

简单的方法是支持“订阅”在线消息 - 这可以让其他用户通过“订阅”尝试来检查您目前是否存在(如果他们不知道)。请检查this useful guide开始,并且the standard获取更多重要的详细信息(尤其是保护您的隐私,如果需要,您不知道来自用户的订阅请求)。

+0

伟大的,优秀的链接。谢谢您的帮助! – 2010-09-18 02:30:57

+0

@克里斯,不客气! – 2010-09-18 05:28:38

1

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

亚历克斯描述了客户如何跟踪存在。 XMPP要求我批准您可以收到我的出席信息,反之亦然。对于您的机器人,这意味着您需要跟踪谁在线,最终用户需要接受您的在线请求。这也意味着您可以响应用户的在线请求,并随时了解您的机器人是否已启动。

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

+0

是的,我实际上最终走了后一条路线 - 我只是轮询ejabberd来找出所有在线的人,因为这比让客户跟踪它和我的程序投票更容易。一般来说,作为XMPP的新手,我认为通过xmpppy库会有更简单的方法来做到这一点,但最终并非如此 - 尽管如此! – 2010-09-24 16:57:16

0

您可能希望看到"Jabber bot - how to get the availability of contacts?"这个问题。如果我正确理解你的问题,我认为它与它有关。

当然,正如Alex指出的那样,无论如何,您需要订阅用户的存在 - 但您似乎已经理解了这一点。