引用:q412239930 发表于 2018-04-08 09:43 你考虑的基本是这样。可以动手实践一下 |
引用:JackJiang 发表于 2018-04-04 16:53 二是同时保存在在线列表里; 在线列表 OnlineProcessor.onlineSessions 用这个不行吧? 因为设备离线后 会从这个Map里面移除。 如果按照这个逻辑,应该再加一个集合,保存登陆过的用户。 |
引用:q412239930 发表于 2018-04-04 17:20 设备A再次重连的时候会到服务端,服务端比对他带过来的时间戳,由服务端告诉他“你这个相同uid的时间戳晚于那哥们的(当前在线列表中的)”,那就意味着你已经被踢了,在客户端回调里可以拿到服务端在重连接口的返回结果,然后客户端强制release掉整个核心并像qq一样给一个界面提示(比如点确认后就退到登陆界面),不就可以了 |
引用:JackJiang 发表于 2018-04-04 16:53 现在的问题关键是,第二个步骤 设备A再次打开app,应该要能知道已经有别的设备登陆了账户,这样设备A就能知道强行退出登陆。并且到登陆界面 |
最好的办法应该是这样: 第一步:每次启动APP第一次登陆时(区别于掉线重连的情况),服务端在它登陆成功时生成一个时间戳,一是给客户端返回、二是同时保存在在线列表里; 第二步:每个客户端登陆时带着这个时间戳到服务端,服务端来比对这个时间戳是否为空、是否是新还是老的,就能区分出:是不是同一个客户的掉线重连、或者不同客户的被踢等情况。 你按我的思路体验一下,一定可以解决,尤其服务端比对这个逻辑。 |