1 Netty服务端开发
在开始使用Netty开发TimeServer之前,先回顾一下使用NIO进行访问端开发的步骤。
1、创建ServerSocketChannel,配置为非阻塞模式。
2、绑定监听,配置TCP参数。
3、创建一个独立的I/O线程,用于轮询多路复用器Selector。
4、创建Selector,将之前创建的ServerSocketChannel注册到Selector上,监听SelectionKye.ACCEPT。
5、启动I/O线程,在循环体中执行Selector.select()方法,轮询就绪状态的Channel。
6、当轮询到了处于就绪状态的Channel时,需要对其进行判断,如果是OP_ACCEPT状态,说明是新的客户端接入,则调用ServerSocketChannel.accept()方法,接受新的客户端。
7、设置新接入的客户端链路SocketChannel为非阻塞模式,配置其他的一些TCP参数。
8、将SocketChannel注册到Selector,监听OP_READ操作位。
9、如果轮询的Channel位OP_READ,则说明SocketChannel中有新就绪的数据包需要读取,则构造ByteBuffer对象,读取数据包。
10、如果轮询的Channel位OP_WRITE,说明还有数据没有发送完成,需要继续发送。
一个简单的NIO服务端程序,如果我们直接使用JDK的NIO类库进行开发,至少需要以上10个步骤才能完成最基本的消息读取和发送。
TimeServerNetty.java 代码
public class TimeServerNetty {
public static void main(String[] args) {
int port = 8080;
new TimeServerNetty().bind(port);
}
public void bind(int port){
//配置服务端的NIO线程组
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup,workerGroup)
.channel(NioServerSocketChannel.class)