Netty 服务端客户端启动

Netty服务端创建流程

  1. 创建ServerBootStrap实例
  2. 设置并绑定Reactor线程池:EventLoopGroup,EventLoop就是处理所有注册到本线程的Selector上面的Channel
  3. 设置并绑定服务端的channel
  4. 创建处理网络事件的ChannelPipeline和handler,网络时间以流的形式在其中流转,handler完成多数的功能定制:比如编解码 SSl安全认证
  5. 绑定并启动监听端口
  6. 当轮训到准备就绪的channel后,由Reactor线程:NioEventLoop执行pipline中的方法,最终调度并执行channelHandler

启动基本代码

public class NettyServer {

    public static void main(String[] args){
        NioEventLoopGroup firstGroup = new NioEventLoopGroup();
        NioEventLoopGroup secondGroup = new NioEventLoopGroup();

        ServerBootstrap serverBootstrap = new ServerBootstrap();

        serverBootstrap
                .group(firstGroup, secondGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(new ChannelInitializer() {
                    protected void initChannel(NioSocketChannel ch) {
                    }
                });

        serverBootstrap.bind(8000);

    }
}

客户端创建流程

  1. 创建Bootstrap
  2. 创建处理客户端的连接reactor线程组
  3. 创建客户端连接的Niosocketchannel
  4. 创建pipeline和channelhandler
  5. 异步发起TCP连接并判断连接是否成功

启动基本代码

public class NettyClient {
    public static void main(String[] args) {
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        
        Bootstrap bootstrap = new Bootstrap();
        bootstrap
                // 1.指定线程模型
                .group(workerGroup)
                // 2.指定 IO 类型为 NIO
                .channel(NioSocketChannel.class)
                // 3.IO 处理逻辑
                .handler(new ChannelInitializer() {
                    @Override
                    public void initChannel(SocketChannel ch) {
                    }
                });
        // 4.建立连接
        bootstrap.connect("juejin.im", 80).addListener(future -> {
            if (future.isSuccess()) {
                System.out.println("连接成功!");
            } else {
                System.err.println("连接失败!");
            }

        });
    }
}
掘金小册

你可能感兴趣的:(Netty 服务端客户端启动)