判断XMPP用户是否在线

5 投票
2 回答
6884 浏览
提问于 2025-04-16 04:17

我正在使用 xmpppy 这个库来写一个可以和用户聊天的 XMPP 客户端。它有自己的 XMPP 用户账号,需要知道某个用户是否在线。不过,相关的文档对如何实现这一点讲得不太清楚。你有什么建议吗?

到目前为止,我看到的唯一解决方案是,在 XMPP 服务器启动之前先启动一个守护进程,监控所有发送的在线状态消息。如果一个用户发送了“我在线”的消息,但没有发送“我下线”的消息,那就可以认为这个用户是在线的。不过,作为一个对 XMPP 还不太熟悉的新手,我觉得应该有更简单的方法来做到这一点。

2 个回答

1

连接到XMPP服务器基本上有三种方式:作为客户端(你已经做过了),作为组件,以及作为另一个服务器。服务器与服务器之间的连接(s2s)就像邮件服务器之间互相发送邮件一样,是一种联合连接。

Alex提到客户端如何跟踪在线状态。XMPP要求我先同意你可以接收我的在线状态信息,反之亦然。对于你的机器人来说,这意味着为了跟踪谁在线,最终用户需要接受你的在线状态请求。这也意味着你可以回应用户的在线状态请求,并让他们知道你的机器人是否在线。

最后一种方式是作为一个受信任的组件,这种方式只有在你自己运行服务器时才有效。也就是说,如果你试图在jabber.org服务器上这样做,那就没戏了,因为你并不是在运行那个服务器。好处是你可以访问XMPP服务器的内部信息,比如获取在线用户的列表。坏处是你的组件/机器人实现会因为每个服务器的不同而有所不同。

3

简单的方法是支持“订阅”状态消息——这让其他用户可以通过尝试“订阅”来检查你是否在线(如果他们还不知道的话)。你可以查看这个有用的指南来入门,还有这个标准,里面有很多重要的细节(特别是关于如何保护你的隐私,防止不认识的用户发送订阅请求)。

撰写回答