第十四章 客户端创建
14.1 Netty客户端创建流程分析
BootStrap是socket客户端创建工具类,通过Bootstrap可以方便地创建Netty客户端发起异步TCP连接操作
14.1.1 客户端创建时序图
14.1.2 客户端流程分析
- 用户线程创建BootStrap实例,通过API设置创建客户端相关的参数,异步发起客户端连接
- 创建处理客户端连接、I/O读写的Reactor线程组NioEventLoopGroup。通过构造函数指定I/O线程的个数,默认为cpu核数的两倍
- 通过 Bootstrap的ChannelFactory和用户指定的Channel 类型创建用于客户端连接的 NioSocketChannel,它的功能类似于JDK NIO类库提供的 SocketChannel;
- 创建默认的ChannelHandler Pipeline,用于调度和执行网络事件;
- 异步发起TCP连接,判断连接是否成功。如果成功,则直接将NioSocketChannel注册到多路复用器上,监听读操作位,用于数据报读取和消息发送:如果没有立即连接成功,则注册连接监听位到多路复用器,等待连接结果
- 注册对应的网络监听状态位到多路复用器;
- 由多路复用器在I/0现场中轮询各Channel,处理连接结果;
- 如果连接成功,设置Future结果,发送连接成功事件,触发ChannelPipeline执行
- 由ChannelPipeline调度执行系统和用户的ChannelHandler,执行业务逻辑
14.2 源码分析
public class EchoClient {
private final String host;
private final int port;
private final int firstMessageSize;
public EchoClient(String host, int port, int firstMessageSize) {
this.host = host;
this.port = port;
this.firstMessageSize = firstMessageSize;
}
public void run() throws Exception {
// Configure the client.
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group)
<