| package com.sinata.zuul.util.applets; | 
|   | 
| import io.netty.bootstrap.ServerBootstrap; | 
| import io.netty.channel.Channel; | 
| import io.netty.channel.EventLoopGroup; | 
| import io.netty.channel.nio.NioEventLoopGroup; | 
| import io.netty.channel.socket.nio.NioServerSocketChannel; | 
|   | 
| import java.util.Timer; | 
| import java.util.TimerTask; | 
|   | 
|   | 
| /** | 
|  * 即时通讯服务启动类 | 
|  *  | 
|  * @date 2016年6月25日 | 
|  * @version 1.0 | 
|  */ | 
| public class NettyServer0 { | 
|   | 
|     /** | 
|      * 延迟启动设置 | 
|      *  | 
|      * NettyServer启动方法. | 
|      */ | 
|     public void bind() { | 
|         final Thread thread = new Thread(new NettyRunnable()); | 
|         Timer timer = new Timer(); | 
|         timer.schedule(new TimerTask() { | 
|             @Override | 
|             public void run() { | 
|                 thread.start(); | 
|             } | 
|         }, 1000 * 2); | 
|     } | 
|      | 
|     /** | 
|      * 即时通讯服务启动 | 
|      *  | 
|      * @date 2016年6月24日 | 
|      * @version 1.0 | 
|      */ | 
|     public class NettyRunnable implements Runnable { | 
|          | 
|         /** | 
|          * 获取即时通讯启动端口  | 
|          */ | 
|         @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(); | 
|             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()); | 
|                 System.out.println("服务端开启等待客户端连接 ... ..."); | 
|                 Channel ch = b.bind(9090).sync().channel(); | 
|                 ch.closeFuture().sync(); | 
|             } catch (Exception e) { | 
|                 e.printStackTrace(); | 
|             } finally { | 
|                 bossGroup.shutdownGracefully(); | 
|                 workrGroup.shutdownGracefully(); | 
|             } | 
|         } | 
|     } | 
| } |