From d2cf3944abced1147008628f5305e35f17204322 Mon Sep 17 00:00:00 2001 From: wujiawei <1207537021@qq.com> Date: Thu, 2 Mar 2023 23:44:59 +0800 Subject: [PATCH] add HeartBeatClientHandler --- .../proxy/handler/HeartBeatClientHandler.java | 25 ++++++++++++ .../{netty => handler}/ProxyHandler.java | 4 +- .../proxy/{netty => handler}/RealHandler.java | 3 +- .../proxy/client/proxy/netty/ProxySocket.java | 18 +++++++++ .../proxy/client/proxy/netty/RealSocket.java | 1 + .../lazy/netty/proxy/server/ServerSocket.java | 3 ++ .../server/{ => handler}/ClientHandler.java | 3 +- .../handler/HeartBeatServerHandler.java | 38 +++++++++++++++++++ 8 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/HeartBeatClientHandler.java rename lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/{netty => handler}/ProxyHandler.java (95%) rename lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/{netty => handler}/RealHandler.java (95%) rename lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/{ => handler}/ClientHandler.java (97%) create mode 100644 lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/HeartBeatServerHandler.java diff --git a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/HeartBeatClientHandler.java b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/HeartBeatClientHandler.java new file mode 100644 index 0000000..10afc4f --- /dev/null +++ b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/HeartBeatClientHandler.java @@ -0,0 +1,25 @@ +package com.lazy.netty.proxy.client.proxy.handler; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; + +import java.util.Date; + +public class HeartBeatClientHandler extends ChannelInboundHandlerAdapter { + private int lossConnectCount = 0; + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + System.out.println("客户端循环心跳监测发送: " + new Date()); + if (evt instanceof IdleStateEvent) { + IdleStateEvent event = (IdleStateEvent) evt; + if (event.state() == IdleState.WRITER_IDLE) { + ctx.writeAndFlush("biubiu"); + } + + } + } + +} \ No newline at end of file diff --git a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxyHandler.java b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/ProxyHandler.java similarity index 95% rename from lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxyHandler.java rename to lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/ProxyHandler.java index d21e2d5..a602bd2 100644 --- a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxyHandler.java +++ b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/ProxyHandler.java @@ -1,6 +1,8 @@ -package com.lazy.netty.proxy.client.proxy.netty; +package com.lazy.netty.proxy.client.proxy.handler; +import com.lazy.netty.proxy.client.proxy.netty.Constant; +import com.lazy.netty.proxy.client.proxy.netty.RealSocket; import com.lazy.netty.proxy.msg.MyMsg; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; diff --git a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealHandler.java b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/RealHandler.java similarity index 95% rename from lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealHandler.java rename to lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/RealHandler.java index 8fdeaea..49b9e4c 100644 --- a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealHandler.java +++ b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/handler/RealHandler.java @@ -1,6 +1,7 @@ -package com.lazy.netty.proxy.client.proxy.netty; +package com.lazy.netty.proxy.client.proxy.handler; +import com.lazy.netty.proxy.client.proxy.netty.Constant; import com.lazy.netty.proxy.msg.MyMsg; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; diff --git a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxySocket.java b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxySocket.java index a19392f..0890b7d 100644 --- a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxySocket.java +++ b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/ProxySocket.java @@ -1,6 +1,8 @@ package com.lazy.netty.proxy.client.proxy.netty; +import com.lazy.netty.proxy.client.proxy.handler.HeartBeatClientHandler; +import com.lazy.netty.proxy.client.proxy.handler.ProxyHandler; import com.lazy.netty.proxy.msg.MyMsg; import com.lazy.netty.proxy.msg.MyMsgDecoder; import com.lazy.netty.proxy.msg.MyMsgEncoder; @@ -61,6 +63,7 @@ public class ProxySocket { pipeline.addLast(new MyMsgEncoder()); pipeline.addLast(new IdleStateHandler(40, 8, 0)); pipeline.addLast(new ProxyHandler()); + pipeline.addLast(new HeartBeatClientHandler()); } }); @@ -68,6 +71,7 @@ public class ProxySocket { @Override public void operationComplete(ChannelFuture future) throws Exception { if (future.isSuccess()) { + System.out.println("连接服务端成功"); // 客户端链接代理服务器成功 Channel channel = future.channel(); if (StringUtil.isNullOrEmpty(vid)) { @@ -95,6 +99,20 @@ public class ProxySocket { realChannel.config().setOption(ChannelOption.AUTO_READ, true); } } + } else { + + System.out.println("每隔2s重连...."); + future.channel().eventLoop().schedule(new Runnable() { + + @Override + public void run() { + try { + newConnect(null); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }, 2, TimeUnit.SECONDS); } } }); diff --git a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealSocket.java b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealSocket.java index c6b4ed0..f723ef4 100644 --- a/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealSocket.java +++ b/lazy-netty-proxy-client/src/main/java/com/lazy/netty/proxy/client/proxy/netty/RealSocket.java @@ -1,5 +1,6 @@ package com.lazy.netty.proxy.client.proxy.netty; +import com.lazy.netty.proxy.client.proxy.handler.RealHandler; import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; diff --git a/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ServerSocket.java b/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ServerSocket.java index 50da820..d631169 100644 --- a/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ServerSocket.java +++ b/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ServerSocket.java @@ -2,6 +2,8 @@ package com.lazy.netty.proxy.server; import com.lazy.netty.proxy.msg.MyMsgDecoder; import com.lazy.netty.proxy.msg.MyMsgEncoder; +import com.lazy.netty.proxy.server.handler.ClientHandler; +import com.lazy.netty.proxy.server.handler.HeartBeatServerHandler; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; @@ -32,6 +34,7 @@ public class ServerSocket { pipeline.addLast(new MyMsgEncoder()); pipeline.addLast(new IdleStateHandler(40, 10, 0)); pipeline.addLast(new ClientHandler()); + pipeline.addLast(new HeartBeatServerHandler()); } }); diff --git a/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ClientHandler.java b/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/ClientHandler.java similarity index 97% rename from lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ClientHandler.java rename to lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/ClientHandler.java index 9939bc6..4f89460 100644 --- a/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/ClientHandler.java +++ b/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/ClientHandler.java @@ -1,7 +1,8 @@ -package com.lazy.netty.proxy.server; +package com.lazy.netty.proxy.server.handler; import com.lazy.netty.proxy.msg.MyMsg; +import com.lazy.netty.proxy.server.Constant; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.*; diff --git a/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/HeartBeatServerHandler.java b/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/HeartBeatServerHandler.java new file mode 100644 index 0000000..b9cec62 --- /dev/null +++ b/lazy-netty-proxy-server/src/main/java/com/lazy/netty/proxy/server/handler/HeartBeatServerHandler.java @@ -0,0 +1,38 @@ +package com.lazy.netty.proxy.server.handler; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; + +public class HeartBeatServerHandler extends ChannelInboundHandlerAdapter { + private int lossConnectCount = 0; + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + System.out.println("已经5秒未收到客户端的消息了!"); + if (evt instanceof IdleStateEvent){ + IdleStateEvent event = (IdleStateEvent)evt; + if (event.state()== IdleState.READER_IDLE){ + lossConnectCount++; + if (lossConnectCount>2){ + System.out.println("关闭这个不活跃通道!"); + ctx.channel().close(); + } + } + }else { + super.userEventTriggered(ctx,evt); + } + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + lossConnectCount = 0; + System.out.println("client says: "+msg.toString()); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + ctx.close(); + } +} \ No newline at end of file