美文网首页
netty组件

netty组件

作者: 9156523 | 来源:发表于2019-05-17 19:28 被阅读0次

    Channel接口

    定义了netty中基本的网络IO操作,其基本构造就是class Socket,Channel中里所定义的API,大大降低了直接使用Socket类的复杂度

    EventLoop接口

    类似线程,每一个EventLoop在它的生命周期内只会和一个Thread绑定,一个Channel在它的生命周期内只会注册于一个EventLoop中,而一个EventLoop可以被分配给多个Channel,这就是前面所提到的,Channel类似于Socket,而Socket可能被阻塞,如果被阻塞,EventLoop对应线程,当前任务被阻塞,自然就可以去处理别的任务,EventLoopGroup代表有多个EventLoop

    ChannelFuture 接口

    由于Netty中所有的I/O操作都是异步操作,所以不知道它何时处理一个任务,但是可以确定的是这个任务必然会被执行完成,那么我们就可以不关心任务是什么时候完成,`我们只需要关注当任务完成以后需要做什么操作,其addListnner()方法注册了一个ChannelFutureListener事件监听,以便于在某个操作完成时得到通知

    ChannelHandler

    实际功能就是用来处理业务逻辑的,在客户端或者服务端发送消息时,会把消息传入到ChannelPipeline中,而Pipeline就是Handler的容器,里面包含了Handler链,消息入站依次传递处理在到处理完业务到出站,例如,ChannelInboundHandler是一个经常实现的子接口,这种类型的ChannelHandler接收入站事件和数据,随后这些数据会被相应的业务方法处理

    ChannelPipeline接口

    pipeline提供了ChannelHandler链的容器,并且定义了用于在该链上传播入站出站的相关API,当一个Channel通道被创建时,它会被自动分配到一个ChannelPipeline上,然后ChannelHandler被安装到ChannelPipeline中,过程如下

    1. ChannelInitializer的实现类被注册到ServerBootsrap中
    2. ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler
    3. ChannelInitializer将自己从ChannelPipeline中移除

    一个消息会对应以下这张图,从入站开始依次往下传递,在对应的业务逻辑中处理完成后出站


    image.png

    编码器和解码器

    当Netty接收或者发送一个消息时,就会发生一次数据的转换,因为入站时,接收的是字节,我们需要把它转换成java对象,而出站则需要把java对象转换成字节,因为网络数据踪是一系列的字节,通常,对于入站的数据来来说,这些数据会调用decode然后在传递给下一个ChannelInboundHandler
    例如 抽象类SimpleChannelInboundHandler<T>,你只需要指定一个java范型T来获取数据

    引导

    Netty的引导类指的就是我们所说的客户端和服务端,对于客户端来说,需要连接到远程的服务器,所以需要远程地址和对应的端口,然后只需要一个EventLoopGroup 用于处理服务端发送的消息,而对于服务端来说,只需要绑定到某个端口接收请求即可,一般需要两组 EventLoopGroup(自然也可以只使用一组)一组用来建立连接,一组用来处理业务,

    相关文章

      网友评论

          本文标题:netty组件

          本文链接:https://www.haomeiwen.com/subject/wifaaqtx.html