默认
打赏 发表评论 13
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
服务端挂掉或重启后,导致客户端需要“重连”问题,客户端 ChannelHandlerContext 客户的 IdleStateHandler 执行 channelInActive 是没问题的,因为服务端挂掉或关闭,对于此条客户端-服务端的链接就表示是“关闭”了,基于 netty 相关的技术链,相关的"事件"被触发。
此时执行重连,如果是能够连接上,此次的 ChannelHandlerContext 应该不是当前这个,而是一个新的,
示例代码中并没有看到 cimClient.reconnec() 连接成功明细及连接成功后的  channel 与当前这个 channel 的关联关联。
然后实际上 重连后的 channel 应该是一个全新的 channel,与当前这个并没有什么关系。
签名: 52im day 2
评论 13
引用:JackJiang 发表于 2019-11-20 14:58
说了好大一段,一句话总结,你是想说啥?

我原想说的是
1)接收到 channelInActive 事件的客户端,channelInActive 只会执行一次,但文中方案中 scheduledExecutorService.scheduleAtFixedRate(ReConnectJob,0,10,TimeUnit.SECONDS) 这个 job 会重复执行,也即“重连”,当重连成功后,会有一个新的客户端,而上述的 ReConnectJob 会【重复】执行。
---- 经查看该项目代码,有对 channel != null && channel.isActive() 的判断,当满足条件时,会退出该函数。
---- 客户端的 channelInActive 每执行一次,scheduledExecutorService 中会多一个 定时执行的 ReConnectJob,

2)即使在该代码中,当服务端多次断开时,客户端的 channelInActive 也会触发多次,也会有 多个 job 实例添加到 scheduledExecutorService  中定时执行。

签名: 52im day 2
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部