判断XMPP用户是否在线
我正在使用 xmpppy
这个库来写一个可以和用户聊天的 XMPP 客户端。它有自己的 XMPP 用户账号,需要知道某个用户是否在线。不过,相关的文档对如何实现这一点讲得不太清楚。你有什么建议吗?
到目前为止,我看到的唯一解决方案是,在 XMPP 服务器启动之前先启动一个守护进程,监控所有发送的在线状态消息。如果一个用户发送了“我在线”的消息,但没有发送“我下线”的消息,那就可以认为这个用户是在线的。不过,作为一个对 XMPP 还不太熟悉的新手,我觉得应该有更简单的方法来做到这一点。
2 个回答
1
连接到XMPP服务器基本上有三种方式:作为客户端(你已经做过了),作为组件,以及作为另一个服务器。服务器与服务器之间的连接(s2s)就像邮件服务器之间互相发送邮件一样,是一种联合连接。
Alex提到客户端如何跟踪在线状态。XMPP要求我先同意你可以接收我的在线状态信息,反之亦然。对于你的机器人来说,这意味着为了跟踪谁在线,最终用户需要接受你的在线状态请求。这也意味着你可以回应用户的在线状态请求,并让他们知道你的机器人是否在线。
最后一种方式是作为一个受信任的组件,这种方式只有在你自己运行服务器时才有效。也就是说,如果你试图在jabber.org服务器上这样做,那就没戏了,因为你并不是在运行那个服务器。好处是你可以访问XMPP服务器的内部信息,比如获取在线用户的列表。坏处是你的组件/机器人实现会因为每个服务器的不同而有所不同。