当前位置: 代码迷 >> 综合 >> Channel和 Unsafe
  详细解决方案

Channel和 Unsafe

热度:64   发布时间:2024-02-21 19:46:56.0

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 的

  相关解决方案