作用
Bootstrap
用于引导客户端,ServerBootstrap
用于引导服务端常用方法
配置 EventLoop
group()
配置服务端通道实现类
channel()
为 ServerChannel
添加配置
option()
为接受到的通道添加配置
childOption()
为 boss 配置业务处理类
handler()
为 worker 配置业务处理类
childHandler()
服务端绑定端口
bind()
客户端连接服务器
connect()
作用
ChannelFuture
NioSocketChannel
:异步,客户端,TCPNioServerSocketChannel
:异步,服务端,TCPNioDatagramChannel
:异步,UDPNioSctpChannel
:异步,客户端,SCTPNioSctpServerChannel
:异步,服务端,SCTP常用方法
获取 Pipeline
Pipeline()
获取配置
config()
获取访问地址
remoteAddress()
写出并刷新
writeAndFlush()
作用
常用方法
返回通道
channel()
等待异步操作执行完成
sync()
注意这个方法是同步的
它是同步的等待,但被等待的是个异步操作
添加监听器
addListener()
作用
Channel
EnentLoop
中,其上级对象叫 chooserEnentLoop
中的通道进行轮询,并在其就绪时选中更多信息参考 基础 | NIO - [Selector]
作用
Pipeline
的下一个 handlerChannelHandler
可以协同处理业务常用方法
激活时回调
channelActive()
取消激活时回调
channelInactive()
读取时回调
channelRead()
读取完成时回调
channelReadComplete()
写出时回调
channelWrite()
写出完成时回调
channelWriteComplete()
异常时回调
exceptionCaught()
handler 加入时回调
handlerAdded()
hander 已经加入了对应的 context 并可以真正处理事件时触发
Channel
注册到 Selector
并完成准备工作时触发handler 移除时回调
handlerRemoved()
作用
ChannelHandler
如何相互调用结构
Channel
都有且仅有一个 Pipeline
ChannelPipeline
本质上是一个双向链表ChannelHandlerContext
,ChannelHandlerContext
内部是 ChannelHandler
Pipeline
中的 ChannelHandler
不共享ChannelHandler
在同一个链表中,但不会互相影响,Handler 与当前操作不符时会直接放行常用方法
头部追加 Handler
addFirst()
尾部追加 Handler
addLast()
作用
Pipeline
中直接节点的类型,里面封装了 ChannelHandler
ChannelHandler
中方法普遍带有 ChannelHandlerContext
类型的参数pipeline()
、channel()
ChannelHandler
的方法,如 writeAndFlush()
作用
Channel
常用配置
SO_BACKLOG
配置 TCP/IP 协议中,初始化服务器可连接队列的大小
SO_KEEPALIVE
配置是否保持连接存活
作用
Channel
的容器,用于存储、管理所有注册在其中的 Channel
常用方法
注册 channel
addd()
广播写
writeAndFlush()
作用
NioEventLoop
包含一个 Selector
Socket
select
:通过集成的 Selector
监听绑定的 Socket
的关注事件processSelectedKeys
:处理选中的 key,即处理就绪的事件runAllTasks
:执行任务队列中的所有任务作用
NioEventLoop
NioEventLoop
对应一个 Selector
和一个线程ServerSocketChannel
对应一个 NioEventLoop
BossGroup
:负责 accept,通常只有一个 NioEventLoop
WorkerGroup
:负责读写,通常有多个 NioEventLoop
chooser.next()
接口获取某个 NioEventLoop
进行处理当前的 SocketChannel
常用方法
优雅停机(断开连接,关闭线程)
shutdownGracefull()
作用
常用方法
初始化 ByteBuf
copiedBuffer(CharSequence, Charset)
开辟 ByteBuf
buffer(size)
作用
flip()
重要属性
capacity
容量,是 ByteBuf
内部用于存放数据的容器的大小,而不是实际数据量
统一由 capacity()
返回,真实获取方式随具体实现变化,如 array.length
,capacity
readIndex
下一个读入的位置
writeIndex
下一个读入的位置
常用方法
长度
capacity()
数据写入
writeByte
向缓冲区写入字节
writerIndex 会 +1
读取数据
readByte()
从缓冲区读取字节
readerIndex 会 +1
获取读指针
readerIndex()
读指针指向即将被读的位置
获取写指针
writerIndex()
写指针指向即将被写的位置
读取数据
getByte(index)
获取指定 index 的字节
不影响 readIndex
按 index 范围读取字符串
getCharSequence(start,end,charset)
是否有数组
hasArray()
如果返回 true 才能安全的 array()
、arrayOffset()
获取 byte 数组
array()
获取字节数组中第一个字节的偏移量
arrayOffset()
获取可读字节数
readableBytes()
参考 属性关系图