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