From d8690bc04296d1f4b91dfd54c1c8cad2496d8cdb Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Tue, 12 Jul 2022 17:29:52 +0800 Subject: [PATCH] =?UTF-8?q?netty=E4=BE=9D=E8=B5=96=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9Eweb=E6=9C=8D=E5=8A=A1=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- neutrino-core/pom.xml | 4 ++ .../core/bean/AbstractBeanFactory.java | 2 +- .../asgc/neutrino/core/bean/BeanWrapper.java | 2 +- .../core/context/ApplicationRunner.java | 2 +- .../core/web/WebApplicationServer.java | 58 ++++++++++++++++++- neutrino-proxy-core/pom.xml | 4 -- 6 files changed, 63 insertions(+), 9 deletions(-) diff --git a/neutrino-core/pom.xml b/neutrino-core/pom.xml index 4e90bbaa..6f07a6b3 100644 --- a/neutrino-core/pom.xml +++ b/neutrino-core/pom.xml @@ -13,6 +13,10 @@ neutrino-core + + io.netty + netty-all + commons-fileupload commons-fileupload diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/AbstractBeanFactory.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/AbstractBeanFactory.java index 2d9f6743..e8d0688e 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/AbstractBeanFactory.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/AbstractBeanFactory.java @@ -549,7 +549,7 @@ public abstract class AbstractBeanFactory implements BeanFactory, BeanRegistry, getOrNew(b); b.run(getEnvironment().getMainArgs()); } catch (Exception e) { - // ignore + e.printStackTrace(); } }); } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/BeanWrapper.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/BeanWrapper.java index 84a280dc..ed68c649 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/BeanWrapper.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/bean/BeanWrapper.java @@ -129,7 +129,7 @@ public class BeanWrapper implements LifeCycle { return false; } - public void run(String[] args) { + public void run(String[] args) throws Exception { if (BeanStatus.INIT != status) { return; } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/ApplicationRunner.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/ApplicationRunner.java index bb604e44..3b43d089 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/ApplicationRunner.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/context/ApplicationRunner.java @@ -29,6 +29,6 @@ package fun.asgc.neutrino.core.context; */ public interface ApplicationRunner { - void run(String[] args); + void run(String[] args) throws Exception; } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/web/WebApplicationServer.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/web/WebApplicationServer.java index 0e0327a0..d476f025 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/web/WebApplicationServer.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/web/WebApplicationServer.java @@ -23,10 +23,21 @@ package fun.asgc.neutrino.core.web; import fun.asgc.neutrino.core.annotation.Autowired; import fun.asgc.neutrino.core.annotation.Component; +import fun.asgc.neutrino.core.annotation.Destroy; +import fun.asgc.neutrino.core.annotation.Init; import fun.asgc.neutrino.core.context.ApplicationConfig; import fun.asgc.neutrino.core.context.ApplicationRunner; import fun.asgc.neutrino.core.util.NumberUtil; import fun.asgc.neutrino.core.util.StringUtil; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.*; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.HttpObjectAggregator; +import io.netty.handler.codec.http.HttpServerCodec; +import io.netty.handler.stream.ChunkedWriteHandler; import lombok.extern.slf4j.Slf4j; /** @@ -39,12 +50,55 @@ import lombok.extern.slf4j.Slf4j; public class WebApplicationServer implements ApplicationRunner { @Autowired private ApplicationConfig rootApplicationConfig; - @Override - public void run(String[] args) { + private EventLoopGroup bossGroup; + private EventLoopGroup workerGroup; + private ServerBootstrap serverBootstrap; + private ChannelFuture channelFuture; + private byte[] faviconBytes; + + @Init + public void init() { ApplicationConfig.Http http = rootApplicationConfig.getHttp(); if (StringUtil.notEmpty(http.getMaxContentLengthDesc()) && null == http.getMaxContentLength()) { http.setMaxContentLength(NumberUtil.descriptionToSize(http.getMaxContentLengthDesc(), 64 * 1024)); } + this.bossGroup = new NioEventLoopGroup(); + this.workerGroup = new NioEventLoopGroup(); + this.serverBootstrap = new ServerBootstrap(); + } + + @Override + public void run(String[] args) throws Exception { + ApplicationConfig.Http http = rootApplicationConfig.getHttp(); + this.serverBootstrap.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .option(ChannelOption.SO_BACKLOG, 1024) + .childOption(ChannelOption.TCP_NODELAY, true) + .childOption(ChannelOption.SO_KEEPALIVE, true) + .childOption(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator()) + .childHandler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast(new HttpServerCodec()); + pipeline.addLast(new ChunkedWriteHandler()); + pipeline.addLast(new HttpObjectAggregator(http.getMaxContentLength().intValue())); + pipeline.addLast(new SimpleChannelInboundHandler() { + @Override + protected void channelRead0(ChannelHandlerContext channelHandlerContext, FullHttpRequest request) throws Exception { + String uri = request.uri(); + log.info("request: {}", uri); + } + }); + } + }); + channelFuture = this.serverBootstrap.bind(http.getPort()).sync(); + log.info("HTTP服务启动,端口:{} context-path:{}", http.getPort(), http.getContextPath()); + } + + @Destroy + public void destroy() { + this.channelFuture.channel().close(); } } diff --git a/neutrino-proxy-core/pom.xml b/neutrino-proxy-core/pom.xml index 8e61f28b..17fa78d5 100644 --- a/neutrino-proxy-core/pom.xml +++ b/neutrino-proxy-core/pom.xml @@ -13,10 +13,6 @@ neutrino-proxy-core - - io.netty - netty-all - fun.asgc.neutrino neutrino-core