默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 求教登录MobileIMSDK失败回调后,为何客户端还一直在监听
阅读(30647) | 评论(5 收藏 淘帖1
r] [IMCORE-unknow]【注意】会话{uid:null}/192.168.1.15:64316被系统close了,但它里面没有存放user_id,它很可能是没有成功合法认证而被提前关闭,从而正常释放资源。
2022-03-15 11:18:25.014 [INFO ] [n.x.m.server.ServerCoreHandler] [IMCORE-tcp]与{uid:null}/192.168.1.15:64333的会话建立(channelActive)了...
2022-03-15 11:18:25.014 [INFO ] [n.x.m.s.processor.LogicProcessor] [IMCORE-tcp]>> 客户端{uid:null}/192.168.1.15:64333发过来的登陆信息内容是:uid=1001、token=956db130-1427-4e65-850b-d964cec6b3bd、firstLoginTime=1647249051267
2022-03-15 11:18:25.014 [WARN ] [n.x.m.s.processor.LogicProcessor] [IMCORE-tcp]>> 客户端{uid:null}/192.168.1.15:64333登陆失败【no】,马上返回失败信息,并关闭其会话。。。
2022-03-15 11:18:25.015 [WARN ] [n.x.m.s.processor.LogicProcessor] [IMCORE-tcp]>> 客户端{uid:null}/192.168.1.15:64333登陆失败信息返回成功?true(会话即将关闭)
2022-03-15 11:18:25.015 [WARN ] [n.x.m.server.ServerCoreHandler] [IMCORE-unknow]【注意】会话{uid:null}/192.168.1.15:64333被系统close了,但它里面没有存放user_id,它很可能是没有成功合法认证而被提前关闭,从而正常释放资源。
2022-03-15 11:18:28.014 [INFO ] [n.x.m.server.ServerCoreHandler] [IMCORE-tcp]与{uid:null}/192.168.1.15:64351的会话建立(channelActive)了...



即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[已回复] 异构业务系统如何调用IM的服务给客户端发送消息下一篇:[已回复] 求助基于MobileIMSDK的IM服务端集成到springboot后发生OOM

本帖已收录至以下技术专辑

推荐方案
评论 5
没看明白你说的问题具体是什么?你的意思是登陆失败后,登陆指令还在重发?
是的哦

你把你服务端登陆失败完整代码贴出来我看看。
另外,把客户端调用和发送完整登陆指令的代码也贴出来我看看
服务端:
// 验证客户端是否合法
                if(jedis.exists(tokenService.getTokenKey(token))){
                        logger.debug("【DEBUG_回调通知】正在调用回调方法:OnVerifyUserCallBack...(extra="+extra+")"+session);
                        return 0;
                }else{
                        return 1025;
                }


客户端:
PLoginInfo loginInfo = new PLoginInfo(json.getString("id"), json.getJSONObject("data").getString("access_token"));
                    // * 异步提交登陆名和密码
                    new LocalDataSender.SendLoginDataAsync(loginInfo){
                        /**
                         * 登陆信息发送完成后将调用本方法(注意:此处仅是登陆信息发送完成真正的登陆结果要在异步回调中处理哦)。
                         *
                         * @param code 数据发送返回码,0 表示数据成功发出,否则是错误码
                         */
                        protected void fireAfterSendLogin(int code)
                        {
                            Log.p(TAG, String.valueOf(code));
                            if(code !=0){
                                LocalSocketProvider.getInstance().closeLocalSocket();
                            }
                        }
                    }.execute();
下面的是SDK中关于登陆验证返回后的处理逻辑(当返回的code不为0时即认定登陆失败,会同时close掉socket):
    protected void onServerResponseLogined(Protocal pFromServer) {
        PLoginInfoResponse loginInfoRes = ProtocalFactory.parsePLoginInfoResponse(pFromServer.getDataContent());
        if (loginInfoRes.getCode() == 0) {
             if(!ClientCoreSDK.getInstance().isLoginHasInit()) {
                 ClientCoreSDK.getInstance().saveFirstLoginTime(loginInfoRes.getFirstLoginTime());
             }
            fireConnectedToServer();
        } else {
            Log.d(TAG, "【IMCORE-TCP】登陆验证失败,错误码=" + loginInfoRes.getCode() + "!");

            LocalSocketProvider.getInstance().closeLocalSocket();
            ClientCoreSDK.getInstance().setConnectedToServer(false);
        }

        if (ClientCoreSDK.getInstance().getChatBaseEvent() != null) {
            ClientCoreSDK.getInstance().getChatBaseEvent().onLoginResponse(loginInfoRes.getCode());
        }
    }

所以,正常情况下,不会出现你说的刚才的socket还在重复发登陆数据。

或者,你想表达的问题,不是我理解的这样?
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部