检测在XMPP中使用相同帐户的其他客户端

  • 本文关键字:客户端 其他 XMPP xmpp
  • 更新时间 :
  • 英文 :


XMPP允许用户使用同一个帐户从多个客户机同时连接到服务器。我构建了一个应用程序来实现这一点,但是如果启用了桌面客户机,我不希望用户能够使用移动客户机进行连接。这是一个游戏,连接到两个会导致问题。

所以我想知道的是:是否有可能检测到是否有使用相同帐户连接的其他客户端。如果我可以检查其他客户端,我可以自动注销用户。

@Flow在正确的轨道上。如果所有客户端实例使用相同的资源,在大多数服务器中,后连接的客户端将取代旧的会话。旧的会话将得到冲突流错误,并断开连接。你必须小心不要自动重新连接到旧的客户端,否则你将会写"垂死挣扎的资源"。bug。

如果你可以控制你的服务器,你有机会配置它,允许一个给定的用户最多使用一个资源,在这种情况下,新的连接将失败并产生冲突错误,但是如果你继续这样做,你会有更严重的用户界面问题;没有办法让第二个客户端登录,即使你想。

最后,给定用户的所有资源都订阅该用户的存在。只要你的客户端发送存在:

<presence/>

您将收到来自其他设备的存在:

<presence to='user@example.com/resource1' from='user@example.com/resource2'/>
<presence to='user@example.com/resource1' from='user@example.com/resource3'/>
<presence to='user@example.com/resource1' from='user@example.com/resource4'/>

您可以使用它来确定哪个客户端是当前的,也许是通过向存在添加扩展名,如XEP-0115。

给桌面和移动客户端一个固定但不同的资源字符串。如果移动客户端登录,它可以通过查找桌面客户端资源的存在/可用性来检测桌面客户端是否存在,反之亦然。

然后,您只需要实现一个定制的XMPP ad-hoc命令(XEP-0050),它告诉冲突的资源注销。

这将是服务器的责任:拒绝来自不被接受的客户端的登录。我不知道服务器是否能够将xmpp客户端列入黑名单,但是,如果您使用openfire,您应该能够编写扩展

相关内容

最新更新