在netty中怎么快速判断设备TCP断开了链接(物理终端断开连接,netty服务器端怎么知道)

先说一下背景吧,公司开发一款新的终端设备,用的JTT808协议。然后呢,需要一个新的网关。于是找了一下用了Netty+springboot的架构。因为以前做的都是C,C++的,刚转投JAVA门下,遇到了很多问题。

今天要说的问题就是,不使用netty的心跳机制,然后如何判断终端的设备掉线了。

先上结论,复写ChannelHandlerAdapter中的handlerRemoved。

    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception{

        // 我这里用了map来保存链接,方便给终端发消息用
    	Map<String, ChannelId> map = ChannelManager.channelIdMap;
	    String mapKey = "";
	    
        // 通过对比channel的id,知道哪个设备掉线了,然后删除
    	for(Map.Entry<String, ChannelId> entry : map.entrySet()){
    		mapKey = entry.getKey();
    	    ChannelId mapValue = entry.getValue();
    	    log.info("客户端{}读取超时,{}", mapKey,mapValue);

    	    if(mapValue  == ctx.channel().id())
    	    {
        	    log.info("成功了{},{}", mapKey,mapValue);
    	    }
    	}
    	
        //这里执行客户端断开连接后的操作
    	log.error("断开了链接");
    	ctx.close();
    	
        if(!mapKey.equals(""))
        {
            map.remove(mapKey);
        }
    }

代码经过试验了,每当有TCP断开连接的时候,都会调用这个函数。所以可以在想要处理的handler中,复写这个函数加上要实现的内容就好了。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值