默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
关于自已开发的IM服务端管理存活channel时,如何判断连接是否失效的办法
阅读(42148) | 评论(5 收藏 淘帖
public ConcurrentHashMap<String,Channel> pcChannels = new ConcurrentHashMap<>();//保存pc端的channel
public ConcurrentHashMap<String,Channel> webChannels = new ConcurrentHashMap<>();//保存web端的channel

public ConcurrentHashMap<String,Long> heartbeat = new ConcurrentHashMap<>();//将存活的连接保存起来现在的问题是这样存的话,如果客户端异常离线,服务端如何知道,map如何清除已经失效的连接
我现在的做法是,接受到客户端的心跳消息就修改heartbeat的时间戳。在服务端开启一个定时任务,定时循环heartbeat
如果心跳时间戳超过3分钟没有接受到某个连接的心跳消息,就把三个map里的对应key的数据清除。这样做是不是不妥啊。
常规操作是怎么样的。

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

标签:IM开发
上一篇:用netty的websocket开发IM,收到ContinuationWebSocketFrame该如何处理?下一篇:IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理
推荐方案
评论 5
如果定时任务挂了,大量的僵尸连接会占用资源。
定时任务短时间执行大量的循环,对服务器资源会不会消耗过大。
引用:淘序员 发表于 2018-01-11 19:14
如果定时任务挂了,大量的僵尸连接会占用资源。
定时任务短时间执行大量的循环,对服务器资源会不会消耗过 ...

你用的是Netty框架吗?如果是Netty框架的话,服务端的会话心跳检查和超时检测不需要你自已写,你自已写先不说是不是最佳实践,可靠性什么的肯定没有Netty内置的好,具体如何使用,你可以参考MobileIMSDK框架的服务端netty版源码,只要配置一下即可,就像下面这样:
关于自已开发的IM服务端管理存活channel时,如何判断连接是否失效的办法_1.png
引用:JackJiang 发表于 2018-01-11 19:32
你用的是Netty框架吗?如果是Netty框架的话,服务端的会话心跳检查和超时检测不需要你自已写,你自已写先 ...

ch.pipeline().addLast(new IdleStateHandler(0, 0, 60 * 10));
这个方法是不是也能设置?
引用:淘序员 发表于 2018-01-11 21:54
ch.pipeline().addLast(new IdleStateHandler(0, 0, 60 * 10));
这个方法是不是也能设置?

看样子应该可以,但我没用过IdleStateHandler
引用:mw-im 发表于 2018-01-12 16:28
当然可以,

检测空闲连接和超时是为了及时释放资源。常见的方法发送消息用于测试一个不活跃的连接来, ...

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

返回顶部