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

标签 xmpp

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

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

最佳答案

@Flow走在正确的轨道上。如果您的所有客户端实例都使用相同的资源,那么在大多数服务器中,较晚连接的客户端将替换较旧的 session 。较旧的 session 将获得 conflict流错误,并被断开。您必须小心不要自动重新连接旧客户端,否则您将写下“决斗资源”错误。

如果您可以控制您的服务器,您就有机会将其配置为允许给定用户最多使用一种资源,在这种情况下,较新的连接将因冲突错误而失败,但您的用户会更差如果你沿着那条路走下去,就会出现界面问题;即使您愿意,也无法让第二个客户端登录。

最后,给定用户的所有资源都订阅了该用户的状态。只要您的客户发送出席信息:

<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 - 在 XMPP 中检测使用相同帐户的其他客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272460/

相关文章:

android - 在整个应用程序中保持 XMPP 连接(使用 smack)

android - 我无法从当前添加的用户获取昵称

ssl - 麦卡伯 : Unable to connect to the server (Ejabberd)

java - 创建新用户时出现 Smack XMPP 错误 : forbidden - auth

java - 在 XMPP 中加入 MUC 房间时出错(smack)

android - Android 服务的良好做法

android - XMPP - 资源绑定(bind)有用性

java - 如何在 android 中有效地使用持久性 XMPP

java - GCM 和 Smack API

java - 如何在XMPP(Openfire)中删除群聊消息?