package cn.mb.cloud.gateway.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(); } } } }