netty 模块与设计

简介

本章将介绍channel、eventloop、channleFuture

  • Channel –sockets
    实现最基础的操作,依赖于下层网络传输的支持
1
2
3
4
5
EmbeddedChannel
LocalServerChannel
NioDatagramChannel
NioSctpChannel
NioSocketChannel
  • EventLoop 流控、多线程、并发
    这一章主要讨论高级的EventLoop与Channle、Threads,以及EventLoopGroup的关系,我们将在第七章深入讲述eventLoop
1
2
3
4
5
一个EventLoopGroup包含一个或多个EventLoop
一个EventLoop绑定一个线程在他的生命周期中
所有的I/O时间都由EventLoop中的线程处理
一个Channel通常在它的生命周期中注册在一个EventLoop
一个EventLoop可能被分配一个或者多个Channles

如图事件循环

  • ChannelFuture 异步通知
    在netty中的所有I/O线程都是异步的,因为所有的操作都不回立即返回结果,因此我们需要一种方式在未来的事件去决定它的结果

ChannelHandler and ChannelPipeline
我们可以通过了解具体的细节去看这些组件怎么管理流式、以及执行业务逻辑。

  • ChannelHandler
    从用户的立场来讲,netty最重要的部分就是component就是ChannleHandler,通常netty提供一个应用逻辑的容器,去处理所有的出站与入站的数据。这是因为ChannelHadnler所有的方法都是由Event来触发。包括异常的处理,数据类型的转换等。

  • ChannelPipleline
    一个ChannelPipleline提供一个链式ChannelHandler的容器,并且处理入站与出站的流式数据,当一个Channel创建的时候,它会自动被分配给一个ChannelPipleline

1
2
3
一个 ChannelInitializer 实现通常将自己注册在ServerBootstrap
当ChannelInitializer.initChannel() 调用的时候,这个ChannelInitializer通常将吧用户自己实现的handler注册在pipeline
ChannelInitializer 将自己从 ChannelPipeline中删除

如图ChannelPipeline

  • adapters
    代理的作用就是它对所有的方法都有自己的默认实现,因此你可以通过这些类很快的开发基于自定义的实现,只用覆盖你想要覆盖的方法

    1
    2
    3
    4
    ChannelHandlerAdapter
    ChannelInboundHandlerAdapter
    ChannelOutboundHandlerAdapter
    ChannelDuplexHandlerAdapter
  • SimpleChannelInboundHandler
    通常我们编写的应用都是接受一个解码的消息并且通过应用逻辑处理我们的消息。那么创建一个ChannelHandler,你可以通过继承一个基类 SImpleChannleInboundHandler
    T是你要处理的java类型,最重要的一个方法是channelRead0(Channel- HandlerContext,T),记住不要堵塞线程

  • Bootstrapping
    bootstrap 类提供了一个用于配置以及应用网络层的容器,用于连接一个给定特殊的端口与host
category Bootstrap Bootstraping
网络功能 连接一个远程的host、port 绑定本地端口
EventLoopGroup的数量 1 2

如图ChannelPipeline

为什么server端需要两个channles、以及EventLoopGroup,因为一个channle接受创建新连接,一个负责接受正常的请求。

编码与解码 Encoders and Decoders

当数据入站的时候可能通过解码(即byte-> java Object),出站的时候就更好相反,这是编码

netty提供了类似于ByteToMessageDecoder MessageToByteEncoder这样的编解码,通常netty也提供了入站与出站的编解码代理类

本章总结

在这章我们讨论了理解了netty的一席而技术以及架构要点,我们重新回顾了前面的一些具体细节

特殊的我们讨论了,ChannleHandler的一个层次结构,并且介绍了编解码组件,描述了数据在网络层byte格式转换的相辅相成只是。

坚持原创技术分享,您的支持将鼓励我继续创作!