本文根据Netty权威指南(第二版)中的案例编写,有些案例中的类在我使用的jar中找不到,所以有所修改。本文使用的版本是netty-all-4.0.46.Final.jar,可以自行去官网下载。
一、服务端
①TimeServer
package netty.server;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
public class TimeServer {
public static void main(String[] args) {
int port = 8080;
new TimeServer().bind(port);
}
public void bind(int port) {
//配置服务端的NIO线程组
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 1024)
.childHandler(new ChildChannelHandler());
try {
//绑定端口,同步等待成功
ChannelFuture f = b.bind(port).sync();
//等待服务端监听端口关闭
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//优雅退出,释放线程池资源
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
②ChildChannelHandler
package netty.server;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.socket.SocketChannel;