昨天项目修改点代码,重新部署后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();
}