菜鸡学习netty源码(二)——BootStrap启动

embedded/2024/9/25 13:17:57/

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.*///多个重载的方法 最终都会

http://www.ppmy.cn/embedded/29554.html

相关文章

Pandas入门篇(三)-------数据可视化篇2(pandas-plot篇)

目录 概述一、格式1. 生成pandas.plotting对象来生成图表2. 调用plot()函数来生成图表3.支持的图表类型 二、单变量绘图常用图表1. 柱状图&#xff08;bar&#xff09;使用场景代码实现 2. 折线图&#xff08;line&#xff09;&#xff08;默认即为折线图&#xff09;适用场景代…

《Redis使用手册之发布与订阅》

《Redis使用手册之发布与订阅》 目录 **《Redis使用手册之发布与订阅》**发布与订阅**SUBSCRIBE&#xff1a;订阅频道****UNSUBSCRIBE&#xff1a;退订频道****PSUBSCRIBE&#xff1a;订阅模式**PUNSUBSCRIBE&#xff1a;退订模式**PUBSUB&#xff1a;查看发布与订阅的相关信息…

golang学习笔记(内存逃逸分析)

golang的内存逃逸 逃逸分析&#xff08; Escape analysis&#xff09; 是指由编译器决定内存分配的位置&#xff0c; 不需要程序员指定。 函数中申请一个新的对象。 如果分配在栈中&#xff0c; 则函数执行结束可自动将内存回收&#xff1b;如果分配在堆中&#xff0c; 则函数…

Neo4j v5 中 Cypher 的变化

How Cypher changed in Neo4j v5 Neo4j v5 中 Cypher 的变化 几周前&#xff0c;Neo4j 5 发布了。如果你像我一样&#xff0c;在 Neo4j 4 的后期版本中忽略了所有的弃用警告&#xff0c;你可能需要更新你的 Cypher 查询以适应最新版本的 Neo4j。幸运的是&#xff0c;新的 Cyp…

自定义 Dockerfile 构建 PostgreSQL 15 编译版 Docker 镜像

BG 前几日 Sean 老师发布了一篇文章 – PostgreSQL安装(一): 再简单点儿&#xff0c;用Docker?, 介绍如何快速安装启动 PostgreSQL 数据库。 本文再稍微延伸一点&#xff0c;介绍一下如何自定义 Dockerfile&#xff0c;加入自己想要预制的参数&#xff0c;构建一个自定义的 …

用智慧树理解spring原理

记得很小的时候&#xff0c;少儿频道有一款很火的亲子综艺节目叫《智慧树》&#xff0c;里面有一期是这样的情节——两个小孩将沉落在小池塘里面的糖果状的石子拾起放入腰间的收集袋&#xff0c;规定时间内收集数量多者取胜。两个小女孩用不同方法收集&#xff0c;一个每次都弯…

GPT-1

GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过 Transformer&#xff0c;使用预训练技术得到通用的语言模型。目前已经公布论文的有 GPT-1、GPT-2、GPT-3。 最近非常火的…

1688详情,搜索,店铺,图搜

简要描述\n根据商品id获取详情数据\n请求URL\nhttp://xxx.xxx.xxx.xxx:xxxx/get_item\n请求方式\nget\n请求Query参数\n参数名 示例值 必选 类型 说明\nitemid 590347769363 是 string 商品id\ntoken admin.api 是 string 权限token\nsales_data 2 是 string 2\nchannel 0 否 s…