Netty学习-组件

在Netty的学习过程中,形如SOAP协议、WSDL语言之于WebService,Netty有几个在使用时必不可少的组件。

1.BootStrap/ServerBootStrap 分别对应客户端以及服务器端,用来配置整个Netty 程序,串联各个组件,一个Netty 程序也是由这部分开启;

ChannelFuture channelFuture = serverBootstrap.bind(port).sync();

2.Handler 为了支持各种协议和处理数据的方式,支持协议主要说的是解析bytebuf到可以解析的说句,handler主要用来处理各种事件,包括连接,数据接收,异常或者数据装换等,在Netty 中,通讯的双方建立连接后,会将数据按照ByteBuf的方式进行传输,也就是说传输都是字节,用的抽象形式就是ByteBuf;
例如Http协议中,服务端就是通过Netty 提供的HttpRequestDecoder对输入的ByteBuf字节数据流进行处理,转换为http对象,同时在输出的时候,通过HttpResponseEncoder将输出的http对象编码成ByteBuf字节数据流输出,同理客户端使用的是HttpRequestEncoder以及HttpResponseDecoder。

3.EventLoop采用轮询任务机制,目的是用来为channel处理IO操作,采用事件通知机制,一个EventLoop可以为多个Channel服务, EventLoopGoop中包括多个EventLoop,Channel就是一个Socket连接,或者其它和IO操作相关的组件。

4.Future,在Netty 中所有的IO操作都是异步的,因此,在调用方法后不能立刻得到正确或者错误的返回,但是可以通过执行sync方法,等待到方法的返回,或者直接注册监听,通过回调的方式,Netty 会在操作执行完成后自动触发回调,所有的操作都会返回一个ChannelFuture

5.Netty 是一个非阻塞的,事件驱动的,网络编程框架,Netty 也会用线程来处理IO事件,一个Channel对应一个EventLoop,一个EventLoop会对应多个Channel一个EventLoop对应一个线程,也就是一个线程可以处理多个Channel ,这也就是JAVA NIO的核心设计。

6.EventLoop实际上继承了ScheduledExecutorService接口。(OrderedEventExecutor->EventExecutor->EventExecutorGroup)

7.客户端的Bootstrap 一般用一个EventLoopGroup, 而服务端的ServerBootStrap会用到两个,第一个EventLoopGroup专门负责分配eventLoop给channel,负责两者关系的绑定,而第二个EventLoopGroup用来处理channel后续的整个生命周期的通信过程。(真正处理的是EventLoopGroup中的eventLoop)

8.ChannelHandler,数据在一个ChannlePipleline,其中需要完成的编码解码,用户操作等都是channelHandler,数据流都会经过每一个channlehandler并且被这个handler处理,ChannelHandler分为两种ChannelOutboundHandler和ChannleInboundHandler,这两个接口分别对应了两个数据流向:

如果数据是从外部流入应用程序,这是inbound;

如果数据是从应用程序流到外部,这是outbound。

9.三种最常用的ChannelHandler:
Encoders和Decoders

因为在网络传输时只能传输字节流,因为,在发送数据之前,必须将应用程序内部的message转换为bytes,对应的,在接受到数据后,必须将接受到的bytes转换成message,这个message可以是String,这样就需要StringEncoder和StringDecoder,如果是Java对象,则需要编写对应的encoder和decoder;

真正的业务逻辑则是处理这个接受到的数据,Netty 提供一个最常用的基础类SimpleChannelInboundHandler,

其中这个泛型T就是这个业务逻辑Handler需要处理的数据类型(上一个解码的handler已经处理好了),消息达到这个handler后,Netty 框架会自动调用这个Handler的

channelRead0(ChannelHandlerContext, T)方法, T就是解码后传递过来的数据,所以应用程序只需要关注如何在这个handler里面编写业务逻辑了。

猜你喜欢

转载自blog.csdn.net/qq_35576994/article/details/85099903