bossGroup与workerGroup
image.pngbossGroup 只用于服务端的 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,通过死循环来轮训
网友评论