Netty 核心源码解读 —— ServerBootstrap 篇,应届毕业生java面试准备

这是我在做 TCP 网关时写的 Netty Server 的代码片段(https://github.com/SongranZhang/tcp-gateway/blob/master/src/main/java/com/linkedkeeper/tcp/connector/tcp/server/TcpServer.java),可以看到,Netty Server 的初始化首先是通过 ServerBootstrap 的无参构造函数创建一个对象,接着是这个对象的一串链式调用 bootstrap.group().channel().childHandler().childOption(),而服务启动的真正触发点是这段 bootstrap.bind(port).sync(),下面我们就逐一来分析下这里的每个方法。

首先是 group() 方法。

ServerBootstrap.java`

private volatile EventLoopGroup childGroup;

public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) { super.group(parentGroup); if (this.childGroup != null) { throw new IllegalStateException("childGroup set already"); } this.childGroup = ObjectUtil.checkNotNull(childGroup, "childGroup"); `return this;``}

这里 workerGroup 赋值给了 ServerBootstrap 的 childGroup,bossGroup 赋值给了父类 AbstractBootstrap 的 group。

AbstractBootstrap.java`

volatile EventLoopGroup group;

public B group(EventLoopGroup group) { ObjectUtil.checkNotNull(group, "group"); if (this.group != null) { throw new IllegalStateException("group set already"); } this.group = group; `return self();``}

接下来是 channel() 方法。

AbstractBootstrap.java`

private volatile ChannelFactory channelFactory;

public B channel(Class channelClass) { return channelFactory(new ReflectiveChannelFactory( ObjectUtil.checkNotNull(channelClass, "channelClass") ));``}

public B channelFactory(ChannelFactory channelFactory) { ObjectUtil.checkNotNull(channelFactory, "channelFactory"); if (this.channelFactory != null) { throw new IllegalStateException("channelFactory set already"); }

this.channelFactory = channelFactory; `return self();`&#

你可能感兴趣的:(程序员,面试,java,后端)