package com.ruoyi.admin.netty;
|
|
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(9595).sync().channel();
|
ch.closeFuture().sync();
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
bossGroup.shutdownGracefully();
|
workrGroup.shutdownGracefully();
|
}
|
}
|
}
|
}
|