From 58aae7a67d93a99edb8144a6d2b71d6151e7c806 Mon Sep 17 00:00:00 2001 From: wujiawei <12345678> Date: Fri, 30 Aug 2024 17:12:23 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=E3=80=91=20=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89netty=20=E6=8E=A5=E6=94=B6=E6=95=B0=E6=8D=AE=E7=BC=93?= =?UTF-8?q?=E5=86=B2=E6=9C=9F=E6=8E=A7=E5=88=B6=E6=8E=A5=E6=94=B6=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../netty/filter/NettyClientRealFilter.java | 3 ++ .../netty/socket/NettyClientRealSocket.java | 12 ++++- ...portHandleChannelTransferTypeAdvanced.java | 4 +- .../netty/filter/NettyServerFilter.java | 8 ++++ .../server/netty/handler/VisitorHandler.java | 7 +++ .../socket/NettyOnCloudNettyServerSocket.java | 14 +++++- .../netty/socket/NettyVisitorSocket.java | 17 ++++++- .../README.md | 2 +- .../pom.xml | 46 +++++++++---------- .../src/main/resources/application-dev.yml | 4 +- .../pom.xml | 46 +++++++++---------- .../pom.xml | 46 +++++++++---------- 13 files changed, 132 insertions(+), 79 deletions(-) diff --git a/pom.xml b/pom.xml index da693e0..44d596f 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ wu-lazy-cloud-heartbeat-common - + wu-lazy-cloud-heartbeat-start diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientRealFilter.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientRealFilter.java index f2b200a..a4457d2 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientRealFilter.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/filter/NettyClientRealFilter.java @@ -4,6 +4,8 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.compression.JdkZlibDecoder; +import io.netty.handler.codec.compression.JdkZlibEncoder; import org.framework.lazy.cloud.network.heartbeat.client.netty.handler.NettyClientRealHandler; import org.framework.lazy.cloud.network.heartbeat.common.decoder.TransferDecoder; import org.framework.lazy.cloud.network.heartbeat.common.encoder.TransferEncoder; @@ -22,5 +24,6 @@ public class NettyClientRealFilter extends ChannelInitializer { pipeline.addLast(new TransferDecoder(Integer.MAX_VALUE, 1024 * 1024*10)); pipeline.addLast(new TransferEncoder()); pipeline.addLast(new NettyClientRealHandler()); + } } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientRealSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientRealSocket.java index 82d8a61..055d5e5 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientRealSocket.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/socket/NettyClientRealSocket.java @@ -58,9 +58,9 @@ public class NettyClientRealSocket { // .option(ChannelOption.SO_RCVBUF, 2048 * 1024) // 设置写缓冲区为1M // .option(ChannelOption.SO_SNDBUF, 1024 * 1024) - .option(ChannelOption.TCP_NODELAY, true) + .option(ChannelOption.TCP_NODELAY, false) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 - .option(ChannelOption.SO_BACKLOG, 128)//务端接受连接的队列长度 默认128 +// .option(ChannelOption.SO_BACKLOG, 128)//务端接受连接的队列长度 默认128 .option(ChannelOption.RCVBUF_ALLOCATOR, new NettyRecvByteBufAllocator(1024 * 1024))//用于Channel分配接受Buffer的分配器 默认AdaptiveRecvByteBufAllocator.DEFAULT .handler(new NettyClientRealFilter()) @@ -136,6 +136,14 @@ public class NettyClientRealSocket { Bootstrap bootstrap = new Bootstrap(); bootstrap.group(eventLoopGroup) .channel(NioSocketChannel.class) + .option(ChannelOption.SO_KEEPALIVE, true) + .option(ChannelOption.TCP_NODELAY, false) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 + .option(ChannelOption.SO_BACKLOG, 256)//务端接受连接的队列长度 默认128 + .option(ChannelOption.RCVBUF_ALLOCATOR, new NettyRecvByteBufAllocator(1024 * 1024))//用于Channel分配接受Buffer的分配器 默认AdaptiveRecvByteBufAllocator.DEFAULT + + .option(ChannelOption.WRITE_BUFFER_WATER_MARK, WriteBufferWaterMark.DEFAULT) + .handler(new NettyClientVisitorRealFilter(new ChannelTypeAdapter(handleChannelTypeAdvancedList))) ; diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java index 1e2a9a7..f9cc677 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java @@ -37,7 +37,7 @@ public class ServerHandleReportHandleChannelTransferTypeAdvanced extends Abstrac public void doHandler(Channel channel, NettyProxyMsg msg) { String clientId = new String(msg.getClientId()); Integer visitorPort = Integer.valueOf(new String(msg.getVisitorPort())); -// log.info("接收到客户端:[{}]内网穿透返回的数据:[{}]", clientId, msg.getData().length); + log.info("访客端口:[{}] 接收到客户端:[{}]",visitorPort, clientId); log.debug("接收到客户端:[{}]内网穿透返回的数据:[{}]", clientId, new String(msg.getData())); // 将数据转发访客通道 byte[] visitorId = msg.getVisitorId(); @@ -46,7 +46,7 @@ public class ServerHandleReportHandleChannelTransferTypeAdvanced extends Abstrac ByteBuf buf = visitor.config().getAllocator().buffer(msg.getData().length); buf.writeBytes(msg.getData()); visitor.writeAndFlush(buf); - + log.info("writeAndFlush"); // 记录出口数据 ServerChannelFlow serverChannelFlow = ServerChannelFlow .builder() diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/NettyServerFilter.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/NettyServerFilter.java index 3958b23..b91df98 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/NettyServerFilter.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/filter/NettyServerFilter.java @@ -3,6 +3,10 @@ package org.framework.lazy.cloud.network.heartbeat.server.netty.filter; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.compression.JdkZlibDecoder; +import io.netty.handler.codec.compression.JdkZlibEncoder; +import io.netty.handler.codec.protobuf.ProtobufDecoder; +import io.netty.handler.codec.protobuf.ProtobufEncoder; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; import io.netty.handler.timeout.IdleStateHandler; @@ -47,5 +51,9 @@ public class NettyServerFilter extends ChannelInitializer { // 类型处理器适配器 ChannelTypeAdapter channelTypeAdapter = new ChannelTypeAdapter(handleChannelTypeAdvancedList); pipeline.addLast("doHandler", new NettyServerHandler(channelTypeAdapter));// 服务端业务逻辑 + + + + } } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/VisitorHandler.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/VisitorHandler.java index ac8cd3a..c6b10a1 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/VisitorHandler.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/handler/VisitorHandler.java @@ -158,6 +158,13 @@ public class VisitorHandler extends SimpleChannelInboundHandler { // if (clientChannel != null) { // clientChannel.config().setOption(ChannelOption.AUTO_READ, visitorChannel.isWritable()); // } + if (ctx.channel().isWritable()) { + System.out.println("Channel is writable again"); + // 恢复之前暂停的操作,如写入数据 + } else { + System.out.println("Channel is not writable"); + // 暂停写入操作,等待可写状态 + } log.info("channelWritabilityChanged"); super.channelWritabilityChanged(ctx); } diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java index 2d3a13d..6d9aa53 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyOnCloudNettyServerSocket.java @@ -8,6 +8,7 @@ import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; +import org.framework.lazy.cloud.network.heartbeat.common.allocator.NettyRecvByteBufAllocator; import org.framework.lazy.cloud.network.heartbeat.server.netty.filter.NettyServerFilter; public class NettyOnCloudNettyServerSocket { @@ -31,9 +32,20 @@ public class NettyOnCloudNettyServerSocket { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) // 给服务端channel设置属性 - .option(ChannelOption.SO_BACKLOG, 128) + .childOption(ChannelOption.SO_KEEPALIVE, true) + + // 设置读缓冲区为2M + .childOption(ChannelOption.SO_RCVBUF, 2048 * 1024) + // 设置写缓冲区为1M + .childOption(ChannelOption.SO_SNDBUF, 1024 * 1024) .childOption(ChannelOption.SO_KEEPALIVE, true) + .childOption(ChannelOption.TCP_NODELAY, false) + .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 + .childOption(ChannelOption.SO_BACKLOG, 512)//务端接受连接的队列长度 默认128 + .childOption(ChannelOption.RCVBUF_ALLOCATOR, new NettyRecvByteBufAllocator(1024 * 1024))//用于Channel分配接受Buffer的分配器 默认AdaptiveRecvByteBufAllocator.DEFAULT + + .childHandler(nettyServerFilter); channelFuture = b.bind(serverPort).sync(); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyVisitorSocket.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyVisitorSocket.java index e66f788..c62c9cd 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyVisitorSocket.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/socket/NettyVisitorSocket.java @@ -10,6 +10,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.InternalNetworkPenetrat import org.framework.lazy.cloud.network.heartbeat.common.NettyClientVisitorContext; import org.framework.lazy.cloud.network.heartbeat.common.NettyVisitorPortContext; import org.framework.lazy.cloud.network.heartbeat.common.adapter.ChannelFlowAdapter; +import org.framework.lazy.cloud.network.heartbeat.common.allocator.NettyRecvByteBufAllocator; import org.framework.lazy.cloud.network.heartbeat.server.netty.filter.VisitorFilter; import java.io.IOException; @@ -48,8 +49,22 @@ public class NettyVisitorSocket { ServerBootstrap b = new ServerBootstrap(); b .group(bossGroup, workerGroup) - .childOption(ChannelOption.SO_KEEPALIVE, true) .channel(NioServerSocketChannel.class) + + + // 设置读缓冲区为2M + .childOption(ChannelOption.SO_RCVBUF, 2048 * 1024) + // 设置写缓冲区为1M + .childOption(ChannelOption.SO_SNDBUF, 1024 * 1024) + + + .childOption(ChannelOption.SO_KEEPALIVE, true) + .childOption(ChannelOption.TCP_NODELAY, false) + .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 1000 * 60)//连接超时时间设置为 60 秒 + .childOption(ChannelOption.SO_BACKLOG, 256)//务端接受连接的队列长度 默认128 + .childOption(ChannelOption.RCVBUF_ALLOCATOR, new NettyRecvByteBufAllocator(1024 * 1024))//用于Channel分配接受Buffer的分配器 默认AdaptiveRecvByteBufAllocator.DEFAULT + + .childHandler(visitorFilter); ChannelFuture sync = b.bind(visitorPort).sync(); sync.addListener((ChannelFutureListener) future -> { diff --git a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/README.md b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/README.md index 7c61a0a..64c2e20 100644 --- a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/README.md +++ b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/README.md @@ -33,7 +33,7 @@ docker push registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-cl ### run ```shell -docker run -d -it --privileged --name client -p 6004:6004 registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.2.7-JDK17-NATIVE-SNAPSHOT +docker run -d -it --privileged --name client -p 6004:6004 registry.cn-hangzhou.aliyuncs.com/wu-lazy/wu-lazy-cloud-heartbeat-client-start:1.2.7-JDK17-SNAPSHOT ``` diff --git a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/pom.xml b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/pom.xml index fd80e75..bee107f 100644 --- a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/pom.xml +++ b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/pom.xml @@ -27,29 +27,29 @@ - - org.graalvm.buildtools - native-maven-plugin - 0.9.23 - - - ${project.artifactId} - - org.framework.lazy.cloud.network.heartbeat.client.LazyCloudHeartbeatClientStart - - --no-fallback - - - - - build-native - - compile-no-fork - - package - - - + + + + + + + + + + + + + + + + + + + + + + + org.springframework.boot spring-boot-maven-plugin diff --git a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application-dev.yml b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application-dev.yml index a925984..d96b473 100644 --- a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application-dev.yml +++ b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application-dev.yml @@ -2,8 +2,8 @@ spring: lazy: netty: client: - inet-host: 127.0.0.1 - inet-port: 7001 + inet-host: 124.222.48.62 + inet-port: 32647 inet-path: wu-lazy-cloud-heartbeat-server client-id: wujiawei # 客户端ID # inet-host: 124.222.48.62 # 服务端地址 diff --git a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-cluster-start/pom.xml b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-cluster-start/pom.xml index 688acce..d68bc26 100644 --- a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-cluster-start/pom.xml +++ b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-cluster-start/pom.xml @@ -32,29 +32,29 @@ - - org.graalvm.buildtools - native-maven-plugin - 0.9.23 - - - ${project.artifactId} - - org.framework.lazy.cloud.network.heartbeat.server.cluster.start.LazyCloudHeartbeatServerClusterStart - - --no-fallback - - - - - build-native - - compile-no-fork - - package - - - + + + + + + + + + + + + + + + + + + + + + + + org.springframework.boot spring-boot-maven-plugin diff --git a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start/pom.xml b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start/pom.xml index c63bfce..d08998e 100644 --- a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start/pom.xml +++ b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-server-start/pom.xml @@ -32,29 +32,29 @@ - - org.graalvm.buildtools - native-maven-plugin - 0.9.23 - - - ${project.artifactId} - - org.framework.lazy.cloud.network.heartbeat.server.LazyCloudHeartbeatServerStart - - --no-fallback - - - - - build-native - - compile-no-fork - - package - - - + + + + + + + + + + + + + + + + + + + + + + + org.springframework.boot spring-boot-maven-plugin