yanghb
2023-04-04 3ce8e9212f465af655a92a9a7d5302f92acb5e40
ZuulTravel/src/main/java/com/sinata/zuul/util/applets/NettyServer0.java
@@ -2,9 +2,12 @@
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import java.util.Timer;
import java.util.TimerTask;
@@ -48,29 +51,27 @@
      @Override
      public void run() {
         System.out.println("===========================Netty端口启动========");
         // Boss线程:由这个线程池提供的线程是boss种类的,用于创建、连接、绑定socket,
         // (有点像门卫)然后把这些socket传给worker线程池。
         // 在服务器端每个监听的socket都有一个boss线程来处理。在客户端,只有一个boss线程来处理所有的socket。
         EventLoopGroup bossGroup = new NioEventLoopGroup();
         // Worker线程:Worker线程执行所有的异步I/O,即处理操作
         EventLoopGroup workrGroup = new NioEventLoopGroup();
         EventLoopGroup workerGroup = new NioEventLoopGroup();
         try {
            // ServerBootstrap 启动NIO服务的辅助启动类,负责初始话netty服务器,并且开始监听端口的socket请求
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workrGroup);
            // 设置非阻塞,用它来建立新accept的连接,用于构造serversocketchannel的工厂类
            b.channel(NioServerSocketChannel.class);
            // ChildChannelHandler 对出入的数据进行的业务操作,其继承ChannelInitializer
            b.childHandler(new ChildChannelHandler());
            //1.创建服务端启动助手
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            //2.设置线程组
            serverBootstrap.group(bossGroup, workerGroup);
            //3.设置参数
            serverBootstrap.channel(NioServerSocketChannel.class)
                  .handler(new LoggingHandler(LogLevel.DEBUG))
                  .childHandler(new ChildChannelHandler());
            System.out.println("服务端开启等待客户端连接 ... ...");
            Channel ch = b.bind(9090).sync().channel();
            ch.closeFuture().sync();
            //4.启动
            ChannelFuture channelFuture = serverBootstrap.bind(80).sync();
            System.out.println("--Netty服务端启动成功---");
            channelFuture.channel().closeFuture().sync();
         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            bossGroup.shutdownGracefully();
            workrGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
         }
      }
   }