diff --git a/proxy-client/src/main/java/org/fengfei/lanproxy/client/ClientChannelMannager.java b/proxy-client/src/main/java/org/fengfei/lanproxy/client/ClientChannelMannager.java index c8a6385..6860871 100644 --- a/proxy-client/src/main/java/org/fengfei/lanproxy/client/ClientChannelMannager.java +++ b/proxy-client/src/main/java/org/fengfei/lanproxy/client/ClientChannelMannager.java @@ -8,6 +8,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; import org.fengfei.lanproxy.client.listener.ProxyChannelBorrowListener; import org.fengfei.lanproxy.common.Config; +import org.fengfei.lanproxy.protocol.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,6 +17,7 @@ import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelOption; import io.netty.util.AttributeKey; /** @@ -67,6 +69,8 @@ public class ClientChannelMannager { if (proxyChannelPool.size() > MAX_POOL_SIZE) { proxyChanel.close(); } else { + proxyChanel.config().setOption(ChannelOption.AUTO_READ, true); + proxyChanel.attr(Constants.NEXT_CHANNEL).remove(); proxyChannelPool.offer(proxyChanel); logger.debug("return ProxyChanel to the pool, channel is {}, pool size is {} ", proxyChanel, proxyChannelPool.size()); } diff --git a/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/ClientChannelHandler.java b/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/ClientChannelHandler.java index e2d8aa4..22aa24b 100644 --- a/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/ClientChannelHandler.java +++ b/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/ClientChannelHandler.java @@ -1,10 +1,10 @@ package org.fengfei.lanproxy.client.handlers; import org.fengfei.lanproxy.client.ClientChannelMannager; -import org.fengfei.lanproxy.client.Constants; import org.fengfei.lanproxy.client.listener.ChannelStatusListener; import org.fengfei.lanproxy.client.listener.ProxyChannelBorrowListener; import org.fengfei.lanproxy.common.Config; +import org.fengfei.lanproxy.protocol.Constants; import org.fengfei.lanproxy.protocol.ProxyMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/RealServerChannelHandler.java b/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/RealServerChannelHandler.java index aeee44f..cb93166 100755 --- a/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/RealServerChannelHandler.java +++ b/proxy-client/src/main/java/org/fengfei/lanproxy/client/handlers/RealServerChannelHandler.java @@ -1,7 +1,7 @@ package org.fengfei.lanproxy.client.handlers; import org.fengfei.lanproxy.client.ClientChannelMannager; -import org.fengfei.lanproxy.client.Constants; +import org.fengfei.lanproxy.protocol.Constants; import org.fengfei.lanproxy.protocol.ProxyMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/proxy-server/src/main/java/org/fengfei/lanproxy/server/Constants.java b/proxy-protocol/Constants.java similarity index 100% rename from proxy-server/src/main/java/org/fengfei/lanproxy/server/Constants.java rename to proxy-protocol/Constants.java diff --git a/proxy-client/src/main/java/org/fengfei/lanproxy/client/Constants.java b/proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/Constants.java similarity index 91% rename from proxy-client/src/main/java/org/fengfei/lanproxy/client/Constants.java rename to proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/Constants.java index 7df87ad..d4c4317 100644 --- a/proxy-client/src/main/java/org/fengfei/lanproxy/client/Constants.java +++ b/proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/Constants.java @@ -1,4 +1,4 @@ -package org.fengfei.lanproxy.client; +package org.fengfei.lanproxy.protocol; import io.netty.channel.Channel; import io.netty.util.AttributeKey; diff --git a/proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/IdleCheckHandler.java b/proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/IdleCheckHandler.java index d07cb6f..5681978 100644 --- a/proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/IdleCheckHandler.java +++ b/proxy-protocol/src/main/java/org/fengfei/lanproxy/protocol/IdleCheckHandler.java @@ -17,9 +17,9 @@ public class IdleCheckHandler extends IdleStateHandler { public static final int USER_CHANNEL_READ_IDLE_TIME = 1200; - public static final int READ_IDLE_TIME = 20; + public static final int READ_IDLE_TIME = 40; - public static final int WRITE_IDLE_TIME = 10; + public static final int WRITE_IDLE_TIME = 20; private static Logger logger = LoggerFactory.getLogger(IdleCheckHandler.class); @@ -30,6 +30,10 @@ public class IdleCheckHandler extends IdleStateHandler { @Override protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt) throws Exception { + if (ctx.channel().attr(Constants.NEXT_CHANNEL) != null) { + return; + } + if (IdleStateEvent.FIRST_WRITER_IDLE_STATE_EVENT == evt) { logger.debug("channel write timeout {}", ctx.channel()); ProxyMessage proxyMessage = new ProxyMessage(); diff --git a/proxy-server/src/main/java/org/fengfei/lanproxy/server/ProxyChannelManager.java b/proxy-server/src/main/java/org/fengfei/lanproxy/server/ProxyChannelManager.java index 241b9c0..d50150d 100644 --- a/proxy-server/src/main/java/org/fengfei/lanproxy/server/ProxyChannelManager.java +++ b/proxy-server/src/main/java/org/fengfei/lanproxy/server/ProxyChannelManager.java @@ -10,6 +10,7 @@ import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.fengfei.lanproxy.protocol.Constants; import org.fengfei.lanproxy.server.config.ProxyConfig; import org.fengfei.lanproxy.server.config.ProxyConfig.ConfigChangedListener; import org.slf4j.Logger; diff --git a/proxy-server/src/main/java/org/fengfei/lanproxy/server/handlers/ServerChannelHandler.java b/proxy-server/src/main/java/org/fengfei/lanproxy/server/handlers/ServerChannelHandler.java index 9085956..54f6f65 100644 --- a/proxy-server/src/main/java/org/fengfei/lanproxy/server/handlers/ServerChannelHandler.java +++ b/proxy-server/src/main/java/org/fengfei/lanproxy/server/handlers/ServerChannelHandler.java @@ -2,8 +2,8 @@ package org.fengfei.lanproxy.server.handlers; import java.util.List; +import org.fengfei.lanproxy.protocol.Constants; import org.fengfei.lanproxy.protocol.ProxyMessage; -import org.fengfei.lanproxy.server.Constants; import org.fengfei.lanproxy.server.ProxyChannelManager; import org.fengfei.lanproxy.server.config.ProxyConfig; import org.slf4j.Logger; @@ -70,6 +70,11 @@ public class ServerChannelHandler extends SimpleChannelInboundHandler { proxyChannel.attr(Constants.CLIENT_KEY).remove(); proxyChannel.attr(Constants.USER_ID).remove(); + proxyChannel.config().setOption(ChannelOption.AUTO_READ, true); // 通知客户端,用户连接已经断开 ProxyMessage proxyMessage = new ProxyMessage(); proxyMessage.setType(ProxyMessage.TYPE_DISCONNECT);