|
@@ -0,0 +1,57 @@
|
|
|
+package cn.nosum.container;
|
|
|
+
|
|
|
+import cn.nosum.handler.GateWayHandler;
|
|
|
+import cn.nosum.handler.HttpRequestHandler;
|
|
|
+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.HttpRequestDecoder;
|
|
|
+import io.netty.handler.codec.http.HttpResponseEncoder;
|
|
|
+
|
|
|
+
|
|
|
+//Netty就是一个同时支持多协议的网络通信框架
|
|
|
+public class NettyGatewayContainer {
|
|
|
+ private int port = 8888;
|
|
|
+ public void start(){
|
|
|
+ // Boss线程
|
|
|
+ EventLoopGroup bossGroup = new NioEventLoopGroup();
|
|
|
+ // Worker线程
|
|
|
+ EventLoopGroup workerGroup = new NioEventLoopGroup();
|
|
|
+ try {
|
|
|
+ ServerBootstrap server = new ServerBootstrap();
|
|
|
+ server.group(bossGroup, workerGroup)
|
|
|
+ .channel(NioServerSocketChannel.class)
|
|
|
+ // 子线程处理类 , Handler
|
|
|
+ .childHandler(new ChannelInitializer<SocketChannel>() {
|
|
|
+ // 客户端初始化处理
|
|
|
+ protected void initChannel(SocketChannel client) throws Exception {
|
|
|
+ // Netty对HTTP协议的封装,顺序有要求
|
|
|
+ // HttpResponseEncoder 编码器
|
|
|
+ client.pipeline().addLast(new HttpResponseEncoder());
|
|
|
+ // HttpRequestDecoder 解码器
|
|
|
+ client.pipeline().addLast(new HttpRequestDecoder());
|
|
|
+ // 业务逻辑处理
|
|
|
+ client.pipeline().addLast(new HttpRequestHandler());
|
|
|
+ client.pipeline().addLast(new GateWayHandler());
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 针对主线程的配置 分配线程最大数量 128
|
|
|
+ .option(ChannelOption.SO_BACKLOG, 128)
|
|
|
+ // 针对子线程的配置 保持长连接
|
|
|
+ .childOption(ChannelOption.SO_KEEPALIVE, true);
|
|
|
+
|
|
|
+ // 启动服务器
|
|
|
+ ChannelFuture f = server.bind(port).sync();
|
|
|
+ System.out.println("已启动,监听的端口是:" + port);
|
|
|
+ f.channel().closeFuture().sync();
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }finally {
|
|
|
+ // 关闭线程池
|
|
|
+ bossGroup.shutdownGracefully();
|
|
|
+ workerGroup.shutdownGracefully();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|