Channel简介
channel是netty网络IO操作抽象出来的一个接口,主要功能有:网络IO的读写,客户端发起连接、主动关闭连接,链路关闭,获取通信双方的网络地址等,还提供了与netty框架相关的操作,如获取channel相关联的EventLoop、pipeline等。
channel 工作原理
Netty 网络通信的组件,能够用于执行网络 I/O 操作。Channel 为用户提供:
-
当前网络连接的通道的状态(例如是否打开?是否已连接?)
-
网络连接的配置参数 (例如接收缓冲区大小)
-
提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保证在调用结束时所请求的 I/O 操作已完成。
调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以 I/O 操作成功、失败或取消时回调通知调用方。
-
支持关联 I/O 操作与对应的处理程序。
Channel的基本方法
Channel read()
ChannelFuture write 写入
id():返回此通道的全局唯一标识符.
isActive():如果通道处于活动状态并连接,则返回true.
isOpen():如果通道打开并且可能稍后激活,则返回true.
isRegistered():如果通道注册了EventLoop,则返回true。
config():返回关于此通道的配置.
localAddress():返回此通道绑定的本地地址.
pipeline():返回分派的ChannelPipeline.
remoteAddress():返回此通道连接到的远程地址.
flush():请求通过ChannelOutboundInvoker将所有挂起的消息输出.
Channel 类型:
NioSocketChannel,异步的客户端 TCP Socket 连接。
NioServerSocketChannel,异步的服务器端 TCP Socket 连接。
NioDatagramChannel,异步的 UDP 连接。
NioSctpChannel,异步的客户端 Sctp 连接。
NioSctpServerChannel,异步的 Sctp 服务器端连接,这些通道涵盖了 UDP 和 TCP 网络 IO 以及文件 IO。
EventLoop 和 EventLoopGroup
在 Netty 中每个 Channel 都会被分配到一个 EventLoop。一个 EventLoop 可以服务于多个 Channel。
每个 EventLoop 会占用一个 Thread,同时这个 Thread 会处理 EventLoop 上面发生的所有 IO 操作和事件(Netty 4.0)
EventLoopGroup 是用来生成 EventLoop 的