From 5cfe1c9ddb4e83634b7ffa130cc026e3f70c4995 Mon Sep 17 00:00:00 2001 From: godotg Date: Mon, 31 Oct 2022 21:09:07 +0800 Subject: [PATCH] =?UTF-8?q?perf[net]:=20limit=20netty=20read=20buffer?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E9=95=BF=E5=BA=A6=E9=9D=9E=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E5=88=99=E6=8A=9B=E5=87=BA=E5=BC=82=E5=B8=B8=E6=96=AD?= =?UTF-8?q?=E5=BC=80=E8=BF=9E=E6=8E=A5=EF=BC=8C=E6=8C=89=E7=85=A7=E8=87=AA?= =?UTF-8?q?=E5=B7=B1=E7=9A=84=E4=BD=BF=E7=94=A8=E5=9C=BA=E6=99=AF=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E5=90=88=E9=80=82=E7=9A=84=E9=95=BF=E5=BA=A6=EF=BC=8C?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=B6=85=E5=A4=A7=E5=8C=85=E5=8D=A0=E7=94=A8=E5=B8=A6=E5=AE=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/codec/jprotobuf/JProtobufTcpCodecHandler.java | 5 +++-- .../java/com/zfoo/net/handler/codec/tcp/TcpCodecHandler.java | 5 +++-- .../java/com/zfoo/net/handler/codec/udp/UdpCodecHandler.java | 5 +++-- .../net/handler/codec/websocket/WebSocketCodecHandler.java | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/handler/codec/jprotobuf/JProtobufTcpCodecHandler.java b/net/src/main/java/com/zfoo/net/handler/codec/jprotobuf/JProtobufTcpCodecHandler.java index 0b5ea5ad..be417ef3 100644 --- a/net/src/main/java/com/zfoo/net/handler/codec/jprotobuf/JProtobufTcpCodecHandler.java +++ b/net/src/main/java/com/zfoo/net/handler/codec/jprotobuf/JProtobufTcpCodecHandler.java @@ -23,6 +23,7 @@ import com.zfoo.net.util.SessionUtils; import com.zfoo.protocol.IPacket; import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.buffer.ByteBufUtils; +import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.StringUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -55,8 +56,8 @@ public class JProtobufTcpCodecHandler extends ByteToMessageCodec IOUtils.BYTES_PER_MB) { throw new IllegalArgumentException(StringUtils.format("[session:{}]的包头长度[length:{}]非法" , SessionUtils.sessionInfo(ctx), length)); } diff --git a/net/src/main/java/com/zfoo/net/handler/codec/tcp/TcpCodecHandler.java b/net/src/main/java/com/zfoo/net/handler/codec/tcp/TcpCodecHandler.java index f9dc89f2..88168ff4 100644 --- a/net/src/main/java/com/zfoo/net/handler/codec/tcp/TcpCodecHandler.java +++ b/net/src/main/java/com/zfoo/net/handler/codec/tcp/TcpCodecHandler.java @@ -18,6 +18,7 @@ import com.zfoo.net.packet.model.DecodedPacketInfo; import com.zfoo.net.packet.model.EncodedPacketInfo; import com.zfoo.net.packet.service.PacketService; import com.zfoo.net.util.SessionUtils; +import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.StringUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; @@ -48,8 +49,8 @@ public class TcpCodecHandler extends ByteToMessageCodec { in.markReaderIndex(); var length = in.readInt(); - // 如果长度非法,则抛出异常断开连接 - if (length < 0) { + // 如果长度非法,则抛出异常断开连接,按照自己的使用场景指定合适的长度,防止客户端发送超大包占用带宽 + if (length < 0 || length > IOUtils.BYTES_PER_MB) { throw new IllegalArgumentException(StringUtils.format("[session:{}]的包头长度[length:{}]非法" , SessionUtils.sessionInfo(ctx), length)); } diff --git a/net/src/main/java/com/zfoo/net/handler/codec/udp/UdpCodecHandler.java b/net/src/main/java/com/zfoo/net/handler/codec/udp/UdpCodecHandler.java index 40c9dea0..26515e32 100644 --- a/net/src/main/java/com/zfoo/net/handler/codec/udp/UdpCodecHandler.java +++ b/net/src/main/java/com/zfoo/net/handler/codec/udp/UdpCodecHandler.java @@ -18,6 +18,7 @@ import com.zfoo.net.packet.model.EncodedPacketInfo; import com.zfoo.net.packet.service.PacketService; import com.zfoo.net.router.attachment.UdpAttachment; import com.zfoo.net.util.SessionUtils; +import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.JsonUtils; import com.zfoo.protocol.util.StringUtils; import io.netty.buffer.ByteBuf; @@ -51,8 +52,8 @@ public class UdpCodecHandler extends MessageToMessageCodec IOUtils.BYTES_PER_MB) { throw new IllegalArgumentException(StringUtils.format("[session:{}]的包头长度[length:{}]非法" , SessionUtils.sessionInfo(channelHandlerContext), length)); } diff --git a/net/src/main/java/com/zfoo/net/handler/codec/websocket/WebSocketCodecHandler.java b/net/src/main/java/com/zfoo/net/handler/codec/websocket/WebSocketCodecHandler.java index a0468f27..f3c77f5e 100644 --- a/net/src/main/java/com/zfoo/net/handler/codec/websocket/WebSocketCodecHandler.java +++ b/net/src/main/java/com/zfoo/net/handler/codec/websocket/WebSocketCodecHandler.java @@ -18,6 +18,7 @@ import com.zfoo.net.packet.model.DecodedPacketInfo; import com.zfoo.net.packet.model.EncodedPacketInfo; import com.zfoo.net.packet.service.PacketService; import com.zfoo.net.util.SessionUtils; +import com.zfoo.protocol.util.IOUtils; import com.zfoo.protocol.util.JsonUtils; import com.zfoo.protocol.util.StringUtils; import io.netty.buffer.ByteBuf; @@ -54,8 +55,8 @@ public class WebSocketCodecHandler extends MessageToMessageCodec IOUtils.BYTES_PER_MB) { throw new IllegalArgumentException(StringUtils.format("[session:{}]的包头长度[length:{}]非法" , SessionUtils.sessionInfo(channelHandlerContext), length)); }