ServerBootStrap的分析

2020-04-11  本文已影响0人  剑道_7ffc

bossGroup与workerGroup

image.png

bossGroup 只用于服务端的 accept,也就是用于处理客户端新连接接入请求,workerGroup负责io操作

bossGroup 和 NioServerSocketChannel关联

io.netty.bootstrap.AbstractBootstrap#initAndRegister

    final ChannelFuture initAndRegister() {
            channel = channelFactory.newChannel();
            init(channel);
             ChannelFuture regFuture = config().group().register(channel);
        }

workerGroup 和 NioServerSocketChannel关联

io.netty.bootstrap.ServerBootstrap.ServerBootstrapAcceptor#channelRead
1 channelRead()方法是在哪里被调用的呢?
其实当一个 client 连接到 server 时,Java 底层 NIO 的 ServerSocketChannel 就会有一个 SelectionKey.OP_ACCEPT 的事件就绪,接着就会调用到 NioServerSocketChannel 的 doReadMessages(),然后通过ChannelPipeline调用到channelRead方法

protected int doReadMessages(List<Object> buf) throws Exception {     SocketChannel ch = javaChannel().accept();
buf.add(new   NioSocketChannel(this, ch)); 
return 1; // 省略错误处理 
}

服务端 Selector 事件轮询

SingleThreadEventExecutor.run,通过死循环来轮训

上一篇 下一篇

猜你喜欢

热点阅读