记一次netty--channelInactive踩到的坑

昨天项目修改点代码,重新部署后channelInactive一直被触发,一直打印
“如果connectionInfo为空的处理方式”。
设备断开连接后connectionInfo不应该为空的。而且断开连接事件发生这么频繁。
最后上去抓包查看下,发现很多未知IP地址的终端一直请求服务器建立TCP连接。建立后一段时间又断开了,该事件就是这么被触发的。
最后只处理正常设备的断开连接事件。(网络环境挺复杂,一些情况本地测试往往测试不出来。服务器一直持有这些非法的长连接不是很浪费资源吗?还是有 比较好的应对方式)

@Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        ConnectionInfo connectionInfo = ctx.channel()
                .attr(OBDServerStarter.ATTR_KEY_CONNECTION_INFO)
                .get();
        if(connectionInfo!=null) {
            System.out.println("你的处理方式");
        }//最后去掉else这里的处理。直接忽略
        else{
            System.out.println("如果connectionInfo为空的处理方式");
        }
        ctx.channel().close();
    }

猜你喜欢

转载自blog.csdn.net/lalalahaitang/article/details/81561553