1. 概述

Netty是一个高性能的Java网络应用程序框架,可以帮助开发人员快速和容易地创建高性能、可靠的网络应用程序。Netty可以帮助开发人员构建强大的网络服务器和客户端应用程序,以便更容易地交换数据。Netty提供了一系列的功能,例如:支持多种协议,提供强大的编解码器,支持异步和同步请求处理以及一系列的可靠性机制。

2. 入门

(1)加入依赖

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.39.Final</version>
</dependency>

(2)服务器端

public class HelloServer {
    public static void main(String[] args) {
        // 1. 启动器
        new ServerBootstrap()
            // 2. 添加处理器组
            .group(new NioEventLoopGroup())
            // 3. 选择服务器的ServerSocketChannel的实现
            .channel(NioServerSocketChannel.class)
            // 4. 每个Channel的处理
            .childHandler(
                new ChannelInitializer<NioSocketChannel>() {
                    // 5. 子处理器的初始化
                    @Override
                    protected void initChannel(NioSocketChannel ch) throws Exception {
                        ch.pipeline().addLast(new StringDecoder());
                        ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
                            @Override
                            public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                                System.out.println(msg);
                            }
                        });
                    }
                }
            )
            .bind(8080);
    }
}

(3)客户端

public class HelloClient {
    public static void main(String[] args) throws InterruptedException, IOException {
        // 创建客户端
        ChannelFuture client = new Bootstrap()
            .group(new NioEventLoopGroup())
            .channel(NioSocketChannel.class)
            .handler(new ChannelInitializer<NioSocketChannel>() {
                @Override
                protected void initChannel(NioSocketChannel ch) throws Exception {
                    ch.pipeline().addLast(new StringEncoder());
                }
            })
            .connect(new InetSocketAddress("localhost", 8080))
            .sync();
        // 发送数据
        Channel channel = client.channel();
        channel.writeAndFlush("hello world");
        System.in.read();
    }
}