Netty的核心模块(二)

发布于 2021-06-13  631 次阅读


一,服务启动项Bootstrap和ServerBootstrap

Bootstrap是引导启动的意思,一个Netty应用程序通常由一个Bootstrap开始,主要主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导配置类,ServerBootstrap是服务器的启动引导配置类

一,AbstractBootstrap抽象类

ServerBootstrap和Bootstrap继承了同一个父类AbstractBootstrap

AbstractBootstrap的API:
  • bind():绑定服务IP和端口号
  • group():绑定EvnetLoopGroup,其实就是绑定BoosGroup和WorkGroup
  • register():将通道,绑定到EventLoop中的Selector进行事件循环监听
  • handler():为Boostrap的BossGroup绑定Handler,注:不是为WorkerGroup绑定
  • channel():指定程序使用通道类对象,如NioSocketChannel.class
  • option():用来给本地的ServerChannel通道添加配置
  • ………………
所有方法实例方法抽象方法具体方法弃用方法
修饰符和类型 方法和描述
<T> B attr(AttributeKey<T> key, T value)

允许指定新创建的通道的初始属性。
ChannelFuture bind()

创建一个新通道并绑定它。
ChannelFuture bind(InetAddress inetHost, int inetPort)

创建一个新通道并绑定它。
ChannelFuture bind(int inetPort)

创建一个新通道并绑定它。
ChannelFuture bind(SocketAddress localAddress)

创建一个新通道并绑定它。
ChannelFuture bind(String inetHost, int inetPort)

创建一个新通道并绑定它。
B channel(Class<? extends C> channelClass)

用于创建通道实例的
B channelFactory(ChannelFactory<? extends C> channelFactory)

B channelFactory(ChannelFactory<? extends C> channelFactory)

用于在调用绑定时创建通道实例的通道工厂。。
abstract B clone()

返回具有相同配置的此引导的深克隆。
abstract AbstractBootstrapConfig<B,C> config()

返回可用于获取引导器当前配置的抽象启动组合对象。
EventLoopGroup group()

荒废的。

请改为使用配置( ) 
B group(EventLoopGroup group)

用于处理要创建频道的所有事件的事件循环组
B handler(ChannelHandler handler)

用于服务请求的通道手
B localAddress(InetAddress inetHost, int inetPort)
B localAddress(int inetPort)
B localAddress(SocketAddress localAddress)

用于将本地"结束"绑定到的插座地址
B localAddress(String inetHost, int inetPort)
<T> B option(ChannelOption<T> option, T value)

允许指定用于频道实例的通道选项,一旦它们被创建。
ChannelFuture register()

创建一个新频道,并将其注册为事件循环
String toString()
B validate()

验证所有参数。

二,ServerBootStrap和BootStrap接口

ServerBootstrap API:
  • childHandler:前面的handler是为BoosGroup绑定Handler,这个是为WorkerGroup绑定Handler
  • config():抽象启动主对象
  • chileOption():用来给接收到的Channel添加配置
所有方法实例方法具体方法弃用方法
修饰符和类型 方法和描述
<T> ServerBootstrap childAttr(AttributeKey<T> childKey, T value)

在每个儿童频道上设置具有给定值的特定属性键
EventLoopGroup childGroup()

荒废的。

请改为使用配置( ) 
ServerBootstrap childHandler(ChannelHandler childHandler)

设置用于服务频道请求的通道
<T> ServerBootstrap childOption(ChannelOption<T> childOption, T value)

允许指定用于频道实例的通道选项(在接受者接受频道之后)。
ServerBootstrap clone()

返回具有相同配置的此引导的深克隆。
ServerBootstrapConfig config()

返回可用于获取引导器当前配置的抽象启动组合对象。
ServerBootstrap group(EventLoopGroup group)

指定用于父(接受者)和孩子(客户端)的事件循环组
ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)

为家长(接受者)和孩子(客户端)设置事件循环组
ServerBootstrap validate()

验证所有参数。
Bootstrap API:
  • connect():连接远程服务器端,指定IP和端口
  • remoteAddress():一旦连接返回一个套接项
所有方法实例方法具体方法
修饰符和类型 方法和描述
Bootstrap clone()

返回具有相同配置的此引导的深克隆。
Bootstrap clone(EventLoopGroup group)

返回此引导程序的深克隆,其配置相同,但使用给定事件循环组
BootstrapConfig config()

返回可用于获取引导器当前配置的抽象启动组合对象。
ChannelFuture connect()

通道连接到远程对等项。
ChannelFuture connect(InetAddress inetHost, int inetPort)

通道连接到远程对等项。
ChannelFuture connect(SocketAddress remoteAddress)

通道连接到远程对等项。
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress)

通道连接到远程对等项。
ChannelFuture connect(String inetHost, int inetPort)

通道连接到远程对等项。
Bootstrap remoteAddress(InetAddress inetHost, int inetPort)
Bootstrap remoteAddress(SocketAddress remoteAddress)

一旦连接()方法被调用,将连接到套接地址
Bootstrap remoteAddress(String inetHost, int inetPort)
Bootstrap resolver(AddressResolverGroup<?> resolver)

设置名称解体,这将解决未解决的命名地址的地址。
Bootstrap validate()

验证所有参数。

二,netty中的Channel

NIO中Channel的概念和Netty中的Channel大同小异,但Netty中Channel做了很多封装,对不同的应用场景,有不同的Channel对象进行处理

Channel的作用:

1)Netty的通信组件中,Channel能够用于执行网络IO操作

2)通过Channel可获得当前网络连接的通道状态

3)通过Channel可获得网络连接的配置参数,例如:缓冲区的大小,Pipline对象

4)Channel还提供异步的网络IO操作(如:建立连接,绑定端口,读写),异步调用意味着任何调用都将立即返回,并且不保证在调用时所请求的IO操作的完成

5)调用立即返回一个ChannelFture实类对象,通过注册监听到ChannelFuture上,可以IO操作成功,失败或者取消回调通知调用方

6)支持关联IO操作与处理抽象

不同协议,不同堵塞类型的连接都有不同的Channel类型与之应

常见的Channel类型有:

  • NioSocketChannel:异步的客户端TCP Socket连接
  • NioServerSocketChannel:异步的服务端TCP Socket连接
  • NioDatagramChannel:异步的UDP连接
  • NioSctpChannel:异步的客户端Sctp连接
  • NioSctpServerChannel:异步的Sctp服务器端连接,这些通道涵盖了UDP和TCP网络IO以及文件IO