From e690d3f2246cee9dd2e26baa1806d4a0c4116a56 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Mon, 30 Jun 2025 22:07:48 +0800 Subject: [PATCH] perf[proxy]: don't send any packet when the tunnel buffer is full --- .../core/proxy/TunnelProtocolServer2Client.java | 16 ++++++---------- .../core/proxy/handler/ProxyCodecHandler.java | 13 +++++++++++++ .../proxy/handler/TunnelServerCodecHandler.java | 6 +++++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/core/proxy/TunnelProtocolServer2Client.java b/net/src/main/java/com/zfoo/net/core/proxy/TunnelProtocolServer2Client.java index 1e2fc774..306e5cb8 100644 --- a/net/src/main/java/com/zfoo/net/core/proxy/TunnelProtocolServer2Client.java +++ b/net/src/main/java/com/zfoo/net/core/proxy/TunnelProtocolServer2Client.java @@ -67,16 +67,12 @@ public class TunnelProtocolServer2Client { public void write(ByteBuf out) { - try { - out.ensureWritable(22); - out.writerIndex(PacketService.PACKET_HEAD_LENGTH); - ByteBufUtils.writeLong(out, sid); - ByteBufUtils.writeLong(out, uid); - out.writeBytes(retainedByteBuf); - NetContext.getPacketService().writeHeaderBefore(out); - } finally { - ReferenceCountUtil.release(retainedByteBuf); - } + out.ensureWritable(22); + out.writerIndex(PacketService.PACKET_HEAD_LENGTH); + ByteBufUtils.writeLong(out, sid); + ByteBufUtils.writeLong(out, uid); + out.writeBytes(retainedByteBuf); + NetContext.getPacketService().writeHeaderBefore(out); } // ----------------------------------------------------------------------------------------------------------------- diff --git a/net/src/main/java/com/zfoo/net/core/proxy/handler/ProxyCodecHandler.java b/net/src/main/java/com/zfoo/net/core/proxy/handler/ProxyCodecHandler.java index a6581a62..d0fd8603 100644 --- a/net/src/main/java/com/zfoo/net/core/proxy/handler/ProxyCodecHandler.java +++ b/net/src/main/java/com/zfoo/net/core/proxy/handler/ProxyCodecHandler.java @@ -26,6 +26,8 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageCodec; import io.netty.util.ReferenceCountUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; @@ -34,6 +36,8 @@ import java.util.List; */ public class ProxyCodecHandler extends ByteToMessageCodec { + private static final Logger logger = LoggerFactory.getLogger(ProxyCodecHandler.class); + @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { @@ -57,11 +61,20 @@ public class ProxyCodecHandler extends ByteToMessageCodec