描述
这是一篇记录,开发Netty聊天系统时遇到 user - channel 映射处理问题相关思考和思路的博客。最后找到了适合的解决方案。
背景
在开发一个IM系统的过程中,因为涉及到聊天消息的转发,需要在服务器根据用户的唯一标识userId能给够获取到该用户对应的channel。用了一个HashMap做 userId - Channel 的关系映射。但此时遇到了一个问题:
- 断开连接后会回调 handlerRemoved 的方法,此时我们只能获取到channel,并没有办法从上述的HashMap中移除相应退出登录的映射。如果用 foreach 遍历 HashMap 来删除 key - value 的话,当HashMap容量比较大时很消耗资源。
@Override
public void handlerRemoved(ChannelHandlerContext ctx) {
System.out.