请选择 进入手机版 | 继续访问电脑版

默认
发表评论 11
请教用NIO框架MINA开发IM时的心跳和会话超时问题
1金币
我目前采用被动心跳,最大时间为60S,当客户端和我连接时,我把客户端网线拔掉,造成有8分钟检测不到,请问问题出现到哪里?其他的形式我这边能检测到。

上一篇:IM的App的Push推送和长连接的关系下一篇:mina2 运行一段时间报BufferUnderflowException 异常
评论 11
何为被动心跳?
你这是完全自已开发的IM吗?用的什么框架?netty还是MINA?
造成8分钟检测不到是什么意思?你希望的效果是怎么样?
签名: 该会员没有填写今日想说内容.
服务端是啥写的?
签名: 工作没精神的时候记得看看我的头像
4 楼: sxb Lv.2 楼主 4 个月前 | 显示全部楼层
引用:JackJiang 发表于 2016-12-22 09:21
何为被动心跳?
你这是完全自已开发的IM吗?用的什么框架?netty还是MINA?
造成8分钟检测不到是什么意思 ...

用的mina,就是客户端发心跳,服务端返心跳,如果客户端60S,没有发送心跳或其他协议,认为断开链接,服务端关闭链接。
5 楼: JackJiang Lv.9 百尺杆头 精华之王 终身成就 4 个月前 来自手机 | 显示全部楼层
用的mina就好办。服务端的session自动检测超时你设置了吗
6 楼: sxb Lv.2 楼主 4 个月前 | 显示全部楼层
引用:JackJiang 发表于 2016-12-22 09:29
用的mina就好办。服务端的session自动检测超时你设置了吗

acceptor.getFilterChain().addLast("keep-alive", new HachiKeepAliveFilterInMina());  
    public HachiKeepAliveFilterInMina() {  
        super(new KeepAliveMessageFactoryImpl(), IdleStatus.BOTH_IDLE,new ExceptionHandler());
        this.setRequestInterval(60);//设置心跳包请求时间间隔
        this.setRequestTimeout(5);//超时时间   如果当前发出一个心跳请求后需要反馈  若反馈超过此事件 默认则关闭连接
        this.setForwardEvent(true); //设置是否将事件继续往下传递
    }

HachiKeepAliveFilterInMina 实现了这个接口KeepAliveFilter ,那个地方还需要设置吗
你还有一个东西没有设置:
去看看你的Acceptor有没有可以设置setSessionRecycler(..)的,这玩意就是设置会话超时用的。
签名: 该会员没有填写今日想说内容.
8 楼: sxb Lv.2 楼主 4 个月前 | 显示全部楼层
引用:JackJiang 发表于 2016-12-22 09:46
你还有一个东西没有设置:
去看看你的Acceptor有没有可以设置setSessionRecycler(..)的,这玩意就是设置会 ...

这个貌似 只有udp协议才有吧,TcP里面没发现,难道我记错了?
引用:sxb 发表于 2016-12-22 09:54
这个貌似 只有udp协议才有吧,TcP里面没发现,难道我记错了?

你查查看,我记不清了
签名: 该会员没有填写今日想说内容.
10 楼: sxb Lv.2 楼主 4 个月前 | 显示全部楼层
引用:JackJiang 发表于 2016-12-22 10:16
你查查看,我记不清了

查过了没有,,其他都能检测到,就是拔网线很长时间检测不到
引用:sxb 发表于 2016-12-22 10:25
查过了没有,,其他都能检测到,就是拔网线很长时间检测不到

找到问题所在了吗?
签名: 该会员没有填写今日想说内容.
12 楼: sxb Lv.2 楼主 3 个月前 | 显示全部楼层
引用:JackJiang 发表于 2016-12-22 15:48
找到问题所在了吗?

以前模式读写空闲,现在改成读空闲可以了
我理解是,读写空闲时,我一直用客户端登陆测试,还再写数据,所以不会空闲,不知道对不?

Processed in 0.187500 second(s), 32 queries , Gzip On.

返回顶部