默认
发表评论 32
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
哥你太敷衍了,标题就4个字,还把4个字中的一个给打错了。。
[已回复] MobileIMSDK服务端的多设备登陆互踢问题求助_WX20170714-150704@2x.png
评论 32
不理解什么是快速登陆。

你可以在客户端收到被踢指令时立即调用sedLoginout指令退出网络。
引用:tiandao 发表于 2017-07-14 15:18
但如果设备1被设备2踢下来后,隔几秒钟重新登陆,互踢就一切正常。

被踢这端的客户端后台在收到指令立即调用sendLoginout登出指令,不可能还会重新登陆,你去试试
引用:tiandao 发表于 2017-07-14 15:44
当出现互踢失败的时候
服务器这边出现这些信息
- [15:43:22.212]toSession==null >> id=0的用户尝试发 ...

你不能在回调里发送踢出指令,因为在这一层存储的用户在线列表(key=uid、value=socketsession)是用用户id作为key存储的,那么在回调里的时候已经由后一个用户覆盖了前一个用户在列表中的sessionsocket了。

你应该在OnlineProcessor的putUser方法中我留的“TODO”地方来按你的互踢逻辑来处理,我已经留好了位置,见下图:
[已回复] MobileIMSDK服务端的多设备登陆互踢问题求助_aa.png
引用:kelefun 发表于 2017-07-16 20:59
请问下, 我在V3版mobileimsdk实现同一账号多设备登录踢调功能遇到的问题

问题1:    我在客户端调用sen ...

你详细理解一下我在10楼的回答。同一账号和重复登陆问题你需要自已去实现相关的逻辑(在UserProcessor里修改),至于你是基于什么样的逻辑完全可以自行决定。
引用:kelefun 发表于 2017-07-17 09:38
谢谢回复,我想要的逻辑是,同一账号只能在一个设备登录,后登录的把之前登录的踢掉 (新登录的设备无感知).
...

UserProcessor只在MobileIMSDK v2版里有,在v3里对应的是OnlineProcessor,我说错了。

我有空了在下一个版本实现一个互踢的参考逻辑吧,不过现在你可以这样去改试试:

1)当第2个客户端(同一个账号)登陆时,服务端在OnlineProcessor里立即像这个socket推出一条“被踢”指令,同时立即断开此socket(你可以测试一下,如果立即断开socket会导致指令还没能发到客户就断开的话,就稍等个几毫秒再断开此socket)并在OnlineProssor里清掉这个已被断掉的socket;
2)客户端在收到“被踢”指令后,不发sendLoginout指令,但ClientCoreSDK.release()方法是一定要调用的:目的是关掉客户端正在运行的im后台线程和网络监听。

你按我的思路试试看。
引用:kelefun 发表于 2017-07-17 10:56
非常希望您能提供一个实现互踢逻辑的demo.

我之前有试过,没有达到效果,(刚接触这个sdk没多久,理解的不 ...

按我16搂的思路理论上是可以实现的。你的问题3里的想法是一个思路,但是会把问题复杂化,没有必要。

其实MINA内部本来就是一条连接一个session(就是socket句柄了),OnlineProcessor只是MobileIMSDK加的在线列表逻辑而已,也就是说你只要针对某个sesion进行操作,它的消息一定可以发过去,不会影响别的连接。
另外,旧的session你可以关掉它,MINA有api,Mobileimsdk里也有关闭的代码,你看看就明白了。这些并没有你想象的复杂。

最佳实践一定是优雅而简单的,如果你觉得复杂,那一定是还没有理解透,那应该换个思路。
引用:tiandao 发表于 2017-07-18 15:48
try {
                                IoSession oldsession = onlineSessions ...

解决了吗?
引用:吴佳同 发表于 2017-11-16 11:19
我这样的处理方式 可以 吗?
@Override
        public int onVerifyUserCallBack(String userId, String toke ...

你按照你的逻辑实现就可以了
引用:吴佳同 发表于 2017-11-16 13:43
在网络出现断线后 框架会自动重连
当重连的时候,有可能再次调用 onVerifyUserCallBack方法,
再次调用 ...

它自动重连的时候,因为之前已经踢掉了其它设备上登陆的端,所以重连时只有这一个客户端存在,没有理由不能自动重连啊。你逻辑不要乱。
引用:dahai2070 发表于 2019-06-17 10:52
不知道群主现在最新的4.*版本,同一个id 重复登录,踢掉前一台设备,这个逻辑还是在onLineProcessor 里面执 ...

客户端收到被踢指令后,只需要管好自已的事,比如release,服务端怎么断开那是服务端的逻辑,不需要客户端来决定,不然就涉及安全问题了。

另外,我在这个帖子里回复了有关互踢的思路,可以参考一下《[已回复] 求教同一账号、不同设备、同时登陆强制下线的优化方法

打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部