Netty

Bootstrap

1.客户端的引导类,用来连接远程主机        
2.通过调用bootstrap.connect()链接服务端
3.连接服务端时指定ip、port
4.有1个EventLoopGroup

ServerBootstrap

1.服务端的引导类,用来接受客户端请求
2.通过调用serverBootstrap.bind()接受客户端
3.在服务器监听一个端口轮询客户端的“Bootstrap”或DatagramChannel是否连接服务器
4.用来绑定本地端口,有2个EventLoopGroup,一个用来接受链接。一个用来处理消息

EventLoop

1.就是一个Channel执行实际工作的线程,一个事件循环线程,也就是线程中有while(true)

EventLoopGroup

1.线程池,用来执行EventLoop,
2.EventLoopGroup包含一个或多个EventLoop

Channel

1.包含消息事件的管道

ChannelPipeline

1.用来管理ChannelHandler的一个容器,ChannelHandler在pipe中有序的执行
2.每个ChannelHandler处理各自的数据(例如入站数据只能由ChannelInboundHandler处理)
3.处理完成后将转换的数据放到ChannelPipeline中交给下一个ChannelHandler继续处理,直到最后一个ChannelHandler处理完成。

  1. 在ChannelPipeline中,如果消息被读取或有任何其他的入站事件,消息将从ChannelPipeline的头部开始传递给第一个ChannelInboundHandler,这个ChannelInboundHandler可以处理该消息或将消息传递到下一个ChannelInboundHandler中,一旦在ChannelPipeline中没有剩余的ChannelInboundHandler后,ChannelPipeline就知道消息已被所有的饿Handler处理完成了。
    5.反过来也是如此,任何出站事件或写入将从ChannelPipeline的尾部开始,并传递到最后一个ChannelOutboundHandler。ChannelOutboundHandler的作用和ChannelInboundHandler相同,它可以传递事件消息到下一个Handler或者自己处理消息。不同的是ChannelOutboundHandler是从ChannelPipeline的尾部开始,而ChannelInboundHandler是从ChannelPipeline的头部开始,当处理完第一个ChannelOutboundHandler处理完成后会出发一些操作,比如一个写操作。

ChannelInitializer

1.用来配置Handlers
2.通过ChannelPipeline来添加ChannelHandler,如发送和接收消息,这些Handlers将确定发的是什么消息。
3.ChannelInitializer自身也是一个ChannelHandler,在添加完其他的handlers之后会自动从ChannelPipeline中删除自己

ChannelHandler

1.ChannelHandler处理业务数据的代码
2.ChannelHandler会在程序的“引导”阶段被添加ChannelPipeline中,依赖于ChannelPipeline来决定它们执行的顺序
3.handler是父接口,ChannelInboundHandler和ChannelOutboundHandler都实现ChannelHandler接口
4.ChannelInboundHandler:若数据时从server到client则是“入站(inbound)”
5.ChannelOutboundHandler:数据是从client到server则是“出站(outbound)”

SimpleChannelInboundHandler

继承ChannelInBoundHandler,应用程序在实现逻辑的时候,只需扩展这个类即可,处理消息用channelRead0()方法

ChannelHandlerContext

每个handler都会获取一个ChannelHandlerContext
ChannelHandlerContext的作用是,在pipeline中一个handler可以通过ChannelHandlerContext调用下面的handler,继续向后发送数据

Encoders:编码器

1.继承MessageToByteEncoder,将object转换成byte[]
2.实际上也是一个handler,继承ChannelOutboundHandlerAdapter

decoders:解码器

1.继承ByteToMessageDecoder,将byte[]转换为object
2.实际上也是一个handler,继承ChannelInboundHandlerAdapter

OioServerSocketChannel

传输消息的时候采用阻塞模式

ByteBuffer

1.字节数组缓冲区,将channel中的数据缓存在buffer中
2.一个很好的经过优化的数据容器,我们可以将字节数据有效的添加到ByteBuf中或从ByteBuf中获取数据。ByteBuf有2部分:一个用于读,一个用于写。我们可以按顺序的读取数据,并且可以跳到开始重新读一遍。所有的数据操作,我们只需要做的是调整读取数据索引和再次开始读操作。
3.分为3种:
1.Heap Buffer,将数据放到jvm的堆中
2.Dirrect Buffer:堆内存之外的直接内存
3.Composite Buffer(复合缓冲区)

Unpooled

1.用来创建缓冲区的工具类
//创建复合缓冲区
CompositeByteBuf compBuf = Unpooled.compositeBuffer();
//创建堆缓冲区
ByteBuf heapBuf = Unpooled.buffer(8);
//创建直接缓冲区
ByteBuf directBuf = Unpooled.directBuffer(16);

你可能感兴趣的:(Netty)