0%

Netty学习-3_Netty组件

1 Channel、EvenetLoop和ChannelFuture

Channel、EvenetLoop和ChannelFuture这些类合在一起可以被认为是Netty网络抽象的代表:

  • Channel——Socket

  • EventLoop——控制流、多线程处理、并发

  • ChannelFuture——异步通知

1.1 Channel接口

​ 基本的I/O操作(bind()、connect()、read()和write())依赖于底层网络传输所提供的原语。在基于Java的网络编程中,其基本的构造是class Socket。Netty的Channel接口所提供的API,大大地降低了直接使用Socket类的复杂性。此外,Channel也是拥有许多预定义的、专门化实现的广泛类层次结构的根,下面是一个简短的部分清单:

  • EmbeddedChannel
  • LocalServerChannel
  • NioDatagramChannel
  • NioSctpChannel
  • NioSocketChannel

1.2 EventLoop 接口

​ EventLoop定义了Netty的核心抽象,用于处理连接的生命周期中所发生的时间。下图说明了Channel、EventLoop、Thread以及EventLoopGroup之间的关系。

​ 这些关系是:

  • 一个EventLoopGroup包含一个或者多个EventLoop
  • 一个EventLoop在他的生命周期内只和一个Thread绑定
  • 所有由EventLoop处理的I/O事件都将在它专有的Thread上被处理
  • 一个Channel在它的生命周期内只注册于一个或多个EventLoop
  • 一个EvenetLoop可能会被分配给一个或多个Channel

1.3 ChannelFuture接口

​ Netty提供了ChannelFuture接口,其addListener()方法注册了一个ChannelFutureListener,以便在某个操作完成时(无论成功与否)得到通知。

2 ChannelHandler和ChannelPipeline

2.1 ChannelHandler接口

​ 从开发人员角度来看,Netty的主要组件是ChannelHandler,它充当了所有处理入站和出站数据的应用程序逻辑的容器。ChannelHandler的方法是由网络事件触发的。事实上,ChannelHandler可专门用于几乎任何类型的动作,例如将数据从一种格式转换为另外一种格式,或者处理转换过程中所抛出的异常。

2.2 ChannelPipeline