本文主要是介绍菜鸡学习netty源码(二)——BootStrap启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.概述
上一篇文章我们虽然写的是AbstractBootStrap的一些方法,但是我们主要分析的还是ServerBootStrap的启动,那我这篇文章的话还是继续看AbstractBootStrap的另一个子类BootStrap的启动。
我们先看下netty客户端的demo代码,如下:
EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap bootstrap = new Bootstrap();bootstrap.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true).handler(new ChannelInitializer<Channel>() {@Overrideprotected void initChannel(Channel channel) throws Exception {channel.pipeline().addLast(new NettyClientHandler());}});ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", 50070).sync();channelFuture.channel().closeFuture().sync();} catch (Exception e) {e.printStackTrace();} finally {group.shutdownGracefully();}
2.Bootstrap
2.1构造函数
构造函数这块感觉没有什么特殊的逻辑,就是一个比较简单的无参构造函数和有参构造函数。
//无参构造函数
public Bootstrap() { }//有参的构造函数private Bootstrap(Bootstrap bootstrap) {super(bootstrap);// 地址解析器对象的赋值resolver = bootstrap.resolver;// 远程连接地址的赋值remoteAddress = bootstrap.remoteAddress;}
看到有参构造函数给resolver 和remoteAddress这两个属性进行了一个赋值的操作,就好奇看下了,感觉这个resolver应该会有一个默认的地址解析器 DEFAULT_RESOLVER
//默认的地址解析器private static final AddressResolverGroup<?> DEFAULT_RESOLVER = DefaultAddressResolverGroup.INSTANCE;public Bootstrap resolver(AddressResolverGroup<?> resolver) {this.resolver = (AddressResolverGroup<SocketAddress>) (resolver == null ? DEFAULT_RESOLVER : resolver);return this;}
2.2 channel方法
在上面使用的示例中接下来我们进行使用了channel方法,感觉跟ServerBootStrap的channel方法一样,没什么特殊。也是直接进行调用父类AbstractBootstrap的channel方法。下面的option方法和handler方法也是同样的,这里就不再多赘述。
public B channel(Class<? extends C> channelClass) {return channelFactory(new ReflectiveChannelFactory<C>(ObjectUtil.checkNotNull(channelClass, "channelClass")));}
2.3 connect方法
我们继续看就看到了一个重要的方法,connect方法,这个方法进行连接服务器的操作,是一个核心的方法。
public ChannelFuture connect(String inetHost, int inetPort) {return connect(InetSocketAddress.createUnresolved(inetHost, inetPort));}/*** Connect a {@link Channel} to the remote peer.*/public ChannelFuture connect(InetAddress inetHost, int inetPort) {return connect(new InetSocketAddress(inetHost, inetPort));}/*** Connect a {@link Channel} to the remote peer.*///多个重载的方法 最终都会
这篇关于菜鸡学习netty源码(二)——BootStrap启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!