From cb6c72a78b09e8df9cb0712bb954b99f1d07091f Mon Sep 17 00:00:00 2001 From: godotg Date: Tue, 4 Apr 2023 17:45:47 +0800 Subject: [PATCH] perf[buffer]: use readSlice instead of readRetainedSlice --- .../handler/codec/http/HttpCodecHandler.java | 80 +++++++------------ .../jprotobuf/JProtobufTcpCodecHandler.java | 35 +------- .../handler/codec/tcp/TcpCodecHandler.java | 31 ++----- .../handler/codec/udp/UdpCodecHandler.java | 39 +++------ .../websocket/WebSocketCodecHandler.java | 33 ++------ 5 files changed, 55 insertions(+), 163 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/handler/codec/http/HttpCodecHandler.java b/net/src/main/java/com/zfoo/net/handler/codec/http/HttpCodecHandler.java index d97bee3d..9a9d2ad0 100644 --- a/net/src/main/java/com/zfoo/net/handler/codec/http/HttpCodecHandler.java +++ b/net/src/main/java/com/zfoo/net/handler/codec/http/HttpCodecHandler.java @@ -35,8 +35,6 @@ import java.util.function.Function; */ public class HttpCodecHandler extends MessageToMessageCodec { - private static final Logger logger = LoggerFactory.getLogger(HttpCodecHandler.class); - private final Function uriResolver; public HttpCodecHandler(Function uriResolver) { @@ -46,67 +44,51 @@ public class HttpCodecHandler extends MessageToMessageCodec list) { - try { - var decodedPacketInfo = uriResolver.apply(fullHttpRequest); - list.add(decodedPacketInfo); - } catch (Exception e) { - logger.error("exception异常", e); - throw e; - } catch (Throwable t) { - logger.error("throwable错误", t); - throw t; - } + var decodedPacketInfo = uriResolver.apply(fullHttpRequest); + list.add(decodedPacketInfo); } @Override protected void encode(ChannelHandlerContext channelHandlerContext, EncodedPacketInfo out, List list) { - try { - var packet = (IPacket) out.getPacket(); - var attachment = (HttpAttachment) out.getAttachment(); + var packet = (IPacket) out.getPacket(); + var attachment = (HttpAttachment) out.getAttachment(); - var protocolVersion = attachment.getFullHttpRequest().protocolVersion(); - var httpResponseStatus = attachment.getHttpResponseStatus(); - if (packet.protocolId() == Message.PROTOCOL_ID) { - var message = (Message) packet; - if (message.fail()) { - httpResponseStatus = HttpResponseStatus.BAD_REQUEST; - } + var protocolVersion = attachment.getFullHttpRequest().protocolVersion(); + var httpResponseStatus = attachment.getHttpResponseStatus(); + if (packet.protocolId() == Message.PROTOCOL_ID) { + var message = (Message) packet; + if (message.fail()) { + httpResponseStatus = HttpResponseStatus.BAD_REQUEST; + } - if (StringUtils.isEmpty(message.getMessage())) { - var fullHttpResponse = new DefaultFullHttpResponse(protocolVersion, httpResponseStatus); - fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN); - fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, 0); - fullHttpResponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); - list.add(fullHttpResponse); - } else { - var byteBuf = channelHandlerContext.alloc().ioBuffer(); - byteBuf.writeCharSequence(message.getMessage(), StringUtils.DEFAULT_CHARSET); - var fullHttpResponse = new DefaultFullHttpResponse(protocolVersion, httpResponseStatus, byteBuf); - - fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN); - fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, byteBuf.readableBytes()); - fullHttpResponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); - list.add(fullHttpResponse); - } + if (StringUtils.isEmpty(message.getMessage())) { + var fullHttpResponse = new DefaultFullHttpResponse(protocolVersion, httpResponseStatus); + fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN); + fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, 0); + fullHttpResponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); + list.add(fullHttpResponse); } else { var byteBuf = channelHandlerContext.alloc().ioBuffer(); - var jsonStr = JsonUtils.object2String(packet); - byteBuf.writeBytes(StringUtils.bytes(jsonStr)); + byteBuf.writeCharSequence(message.getMessage(), StringUtils.DEFAULT_CHARSET); var fullHttpResponse = new DefaultFullHttpResponse(protocolVersion, httpResponseStatus, byteBuf); - fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON); + fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN); fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, byteBuf.readableBytes()); fullHttpResponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); -// fullHttpResponse.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); - list.add(fullHttpResponse); } - } catch (Exception e) { - logger.error("[{}]编码exception异常", JsonUtils.object2String(out), e); - throw e; - } catch (Throwable t) { - logger.error("[{}]编码throwable错误", JsonUtils.object2String(out), t); - throw t; + } else { + var byteBuf = channelHandlerContext.alloc().ioBuffer(); + var jsonStr = JsonUtils.object2String(packet); + byteBuf.writeBytes(StringUtils.bytes(jsonStr)); + var fullHttpResponse = new DefaultFullHttpResponse(protocolVersion, httpResponseStatus, byteBuf); + + fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON); + fullHttpResponse.headers().set(HttpHeaderNames.CONTENT_LENGTH, byteBuf.readableBytes()); + fullHttpResponse.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); +// fullHttpResponse.headers().set(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); + + list.add(fullHttpResponse); } } } 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 81332a12..c87792b0 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 @@ -44,9 +44,6 @@ import java.util.List; */ public class JProtobufTcpCodecHandler extends ByteToMessageCodec { - private static final Logger logger = LoggerFactory.getLogger(JProtobufTcpCodecHandler.class); - - @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws IOException { // 不够读一个int @@ -67,33 +64,14 @@ public class JProtobufTcpCodecHandler extends ByteToMessageCodec) ProtobufProxy.create(packet.getClass()); byte[] bytes = protobufCodec.encode(packet); 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 8cac418d..4fb6ec79 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 @@ -38,8 +38,6 @@ import java.util.List; */ public class TcpCodecHandler extends ByteToMessageCodec { - private static final Logger logger = LoggerFactory.getLogger(TcpCodecHandler.class); - @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { // 不够读一个int @@ -60,34 +58,15 @@ public class TcpCodecHandler extends ByteToMessageCodec { return; } - ByteBuf tmpByteBuf = null; - try { - // readRetainedSlice和byte[]数组相比,readRetainedSlice减少了垃圾回收 - tmpByteBuf = in.readRetainedSlice(length); - DecodedPacketInfo packetInfo = NetContext.getPacketService().read(tmpByteBuf); - out.add(packetInfo); - } catch (Exception e) { - logger.error("decode exception {}", SessionUtils.sessionSimpleInfo(ctx), e); - throw e; - } catch (Throwable t) { - logger.error("decode throwable {}", SessionUtils.sessionSimpleInfo(ctx), t); - throw t; - } finally { - ReferenceCountUtil.release(tmpByteBuf); - } + // readSlice和byte[]数组相比,readSlice减少了垃圾回收 + var sliceByteBuf = in.readSlice(length); + var packetInfo = NetContext.getPacketService().read(sliceByteBuf); + out.add(packetInfo); } @Override protected void encode(ChannelHandlerContext ctx, EncodedPacketInfo packetInfo, ByteBuf out) { - try { - NetContext.getPacketService().write(out, packetInfo.getPacket(), packetInfo.getAttachment()); - } catch (Exception e) { - logger.error("[{}] encode exception {}", SessionUtils.sessionSimpleInfo(ctx), packetInfo.getPacket().getClass().getSimpleName(), e); - throw e; - } catch (Throwable t) { - logger.error("[{}] encode throwable {}", SessionUtils.sessionSimpleInfo(ctx), packetInfo.getPacket().getClass().getSimpleName(), t); - throw t; - } + NetContext.getPacketService().write(out, packetInfo.getPacket(), packetInfo.getAttachment()); } } 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 de2cc964..50849841 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 @@ -37,8 +37,6 @@ import java.util.List; */ public class UdpCodecHandler extends MessageToMessageCodec { - private static final Logger logger = LoggerFactory.getLogger(UdpCodecHandler.class); - @Override protected void decode(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket, List list) { ByteBuf in = datagramPacket.content(); @@ -62,38 +60,19 @@ public class UdpCodecHandler extends MessageToMessageCodec list) { - try { - var byteBuf = channelHandlerContext.alloc().ioBuffer(); - var udpAttachment = (UdpAttachment) out.getAttachment(); + var byteBuf = channelHandlerContext.alloc().ioBuffer(); + var udpAttachment = (UdpAttachment) out.getAttachment(); - NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment()); - list.add(new DatagramPacket(byteBuf, new InetSocketAddress(udpAttachment.getHost(), udpAttachment.getPort()))); - } catch (Exception e) { - logger.error("[{}]编码exception异常", JsonUtils.object2String(out), e); - throw e; - } catch (Throwable t) { - logger.error("[{}]编码throwable错误", JsonUtils.object2String(out), t); - throw t; - } + NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment()); + list.add(new DatagramPacket(byteBuf, new InetSocketAddress(udpAttachment.getHost(), udpAttachment.getPort()))); } } 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 3f430a0c..584b2a0d 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 @@ -40,8 +40,6 @@ import java.util.List; */ public class WebSocketCodecHandler extends MessageToMessageCodec { - private static final Logger logger = LoggerFactory.getLogger(WebSocketCodecHandler.class); - @Override protected void decode(ChannelHandlerContext channelHandlerContext, WebSocketFrame webSocketFrame, List list) { ByteBuf in = webSocketFrame.content(); @@ -65,36 +63,17 @@ public class WebSocketCodecHandler extends MessageToMessageCodec list) { - try { - var byteBuf = channelHandlerContext.alloc().ioBuffer(); + var byteBuf = channelHandlerContext.alloc().ioBuffer(); - NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment()); - list.add(new BinaryWebSocketFrame(byteBuf)); - } catch (Exception e) { - logger.error("[{}]编码exception异常", JsonUtils.object2String(out), e); - throw e; - } catch (Throwable t) { - logger.error("[{}]编码throwable错误", JsonUtils.object2String(out), t); - throw t; - } + NetContext.getPacketService().write(byteBuf, out.getPacket(), out.getAttachment()); + list.add(new BinaryWebSocketFrame(byteBuf)); }