默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 在MobileIMSDK登录判断里获取缓存,会提示以下问题是什么原因?
阅读(35170) | 评论(7 收藏 淘帖1
public int onUserLoginVerify(String userId, String token, String extra, Channel session)
{
   tokenService.getLoginUser(token);
   logger.debug("DEBUG_回调通知】正在调用回调方法:OnVerifyUserCallBack...(extra="+extra+")"+session);
   return 0;
}

在登录判断那里调用获取缓存的时候 会提示以下问题是什么原因呢
[IMCORE-tcp]此客户端的Channel抛出了exceptionCaught,原因是:null,可以提前close掉了哦!
[IMCORE-unknow]【注意】会话{uid:null}/127.0.0.1:53769被系统close了,但它里面没有存放user_id,它很可能是没有成功合法认证而被提前关闭,从而正常释放资源。

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

上一篇:[已回复] 求教MobileIMSDK的客户端socket莫名被关掉的问题下一篇:[已解决] Spring boot 集成MobileIMSDK 服务端无法注入

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

推荐方案
评论 7
在登录判断那里调用获取缓存”,这个你具体的调用代码,可以贴出来我看看,贴的完整一点,我主要想知道:你是怎么调用的?调用了什么代码?在哪里调用的?
我是HTTP调用了登录后 在客户端PLoginInfo loginInfo = new PLoginInfo("12", json.getJSONObject("data").get("access_token").toString());
                    // * 异步提交登陆名和密码
                    new LocalDataSender.SendLoginDataAsync(loginInfo){
                        /**
                         * 登陆信息发送完成后将调用本方法(注意:此处仅是登陆信息发送完成真正的登陆结果要在异步回调中处理哦)。
                         *
                         * @param code 数据发送返回码,0 表示数据成功发出,否则是错误码
                         */
                        protected void fireAfterSendLogin(int code)
                        {
                            Log.p(TAG, String.valueOf(code));
                        }
                    }.execute();

然后服务端的onUserLoginVerify接收这个TOKEN来跟缓存中的TOKEN对比的
引用:cxsoft 发表于 2022-02-21 15:13
我是HTTP调用了登录后 在客户端PLoginInfo loginInfo = new PLoginInfo("12", json.getJSONObject("data"). ...

Http调用http接口进行了用户信息认证是吗?认证完成后,MobileIMSDK自身的登陆有没有调用?

MobileIMSDK自身的“登陆”实际上是长连接应用,socket连接建立的过程,这跟http短连接应用是不一样的!
new LocalDataSender.SendLoginDataAsync(loginInfo){} 这个不是自身的登录吗  要是不传TOKEN过去认证是可以正常通讯的
看代码,没看出明显的调用问题。

你把你这段代码里“tokenService.getLoginUser(token);”这行注释掉,恢复默认状态,看看还会不会有错:

public int onUserLoginVerify(String userId, String token, String extra, Channel session)
{
   tokenService.getLoginUser(token);
   logger.debug("【DEBUG_回调通知】正在调用回调方法:OnVerifyUserCallBack...(extra="+extra+")"+session);
   return 0;
}
知道了 是在这里调用获取不到REIDS缓存的值,我直接调用HTTP的接口是可以获取到缓存的值的。这里调用就会报错 ,不懂是什么原因了。org.springframework.data.redis用的这个来设置和获取的。

/**
     * 获得缓存的基本对象。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    public <T> T getCacheObject(final String key)
    {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }
引用:cxsoft 发表于 2022-02-21 16:50
知道了 是在这里调用获取不到REIDS缓存的值,我直接调用HTTP的接口是可以获取到缓存的值的。这里调用就会报 ...

如果是你写的业务代码本身导致的问题,就好办了,去深究一下即可
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部