zoukankan      html  css  js  c++  java
  • Netty服务端创建流程及组件职责

    public class NettyServer {
        public static void main(String[] args) throws InterruptedException {
            NioEventLoopGroup boosGruop = new NioEventLoopGroup();
            NioEventLoopGroup workerGroup = new NioEventLoopGroup();
    
            ServerBootstrap serverBootstrap = new ServerBootstrap();
    
            serverBootstrap.group(boosGruop,workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<NioSocketChannel>() {
                        @Override
                        protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {
                                nioSocketChannel.pipeline().addLast(new FirstServerHandler());
                        }
                    });
    
            ChannelFuture f = serverBootstrap.bind(8000).sync();
            f.channel().closeFuture().sync();
    
        }
    }

    ServerBootStrap 

      服务端的辅助启动类,使用Builder模式隐藏了多个构造器的参数。

    EventLoopGroup

      Reactor线程池。EventLoopGroup是EventLoop数组,EventLoop负责轮询所有注册到Selector上的channel。

    绑定Channel

      用于指定服务端使用何种channel,可选的有NIO(NioServerSocketChannel)和BIO。netty屏蔽了这两种IO在使用上的区别,方便用户在NIO和BIO之间快速切换。由于在channel中传入的是一个类,所以这里是通过反射创建对象。

    ChannelPipeline与ChannelHandler

      用来处理网络时间的责任链,负责管理和执行ChannelHandler,依据不同的网络时间调用ChannelHandler的不同方法去响应网络事件。除了用户自定义的ChannelHandler还有Netty提供的。

    绑定端口

      这一步完成把Channel注册到Selector上

    Selector轮询

      由EventLoop负责调度和执行Selector操作

    调用执行ChannelHandler

      当注册的时间发生后,会调用ChannelPipeline并继而调用响应的ChannelHandler

  • 相关阅读:
    JAVA 一个接口多个实现类
    关于Web服务器
    美团买菜IOS版设备风控浅析与算法还原
    阿里App防Bot新版AliTigerTally方案浅析与算法还原1
    使用php的openssl_encrypt和python的pycrypt进行跨语言的对称加密和解密问题
    一个把人民币小写转换为大写中文的方法
    《重构》代码坏味道
    git 合并分支
    java中SPI机制 代码改变世界
    echo print print_r的区别
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10874401.html
Copyright © 2011-2022 走看看