Git Product home page Git Product logo

nettyinaction's Introduction

Netty In Action

  1. Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端
  2. Netty主要构件块:
    • Channel
      • Java NIO的一个基本构造,代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同I/O操作的程序组件)的开放连接,如读操作和写操作
    • 回调
      • 一个回调就是一个方法,一个指向已经被提供给另外一个方法的方法引用,是在操作完成后通知相关方最常见的方式之一
    • Future
      • 另一种在操作完成时通知应用程序的方式,可以看做是一个异步操作的结果的占位符
    • 事件和ChannelHandler
  3. 所有的Netty服务器都需要以下两部分:
    • 至少一个ChannelHandler——该组件实现了服务器从客户端接收的数据的处理,即它的业务逻辑
    • 引导——这是配置服务器的启动代码
  4. Netty客户端锁涉及的两个主要代码部分也是业务逻辑和引导
  5. Channel, EventLoop, ChannelFuture可以被认为是Netty网络抽象的代表
    • Channel----Socket
    • EventLoop----控制流、多线程处理、并发
      • 一个EventLoopGroup包含一个或多个EventLoop
      • 一个EventLoop在它的生命周期内只和一个Thread绑定
      • 所有由EventLoop处理的I/O事件都将在它专有的Thread上被处理
      • 一个Channel在它的生命周期内只注册一个EventLoop
      • 一个EventLoop可能会被分配一个或多个Channel
    • ChannelFuture----异步通知
  6. Bootstrap--引导
    • 用于客户端,简单地称为Bootstrap,连接到远程主机和端口,需要一个EventLoopGroup
    • 用于服务器端,称为ServerBootstrap,绑定到一个本地端口,需要两个EventLoopGroup(可以是同一个实例)
  7. Netty的Channel实现都是线程安全的,这意味着即使许多线程在使用同一个Channel,也不必担心同步问题
  8. Netty提供的几种传输
    • NIO:使用java.nio.channels包作为基础--基于选择器的方式
    • epoll:由JNI驱动的epoll()和非阻塞IO,这个传输支持只有在Linux上可用的多种特性,比NIO传输更快,且完全非阻塞
    • OIO:使用java.net包作为基础--使用阻塞流
    • Local:可以在VM内部通过管道进行通信的本地传输
    • Embedded:Embedded传输,允许使用ChannelHandler而又不需要一个真正的基于网络的传输
  9. Java NIO选择器(Selector)运行在一个检查状态变化并对其作出相应响应的线程上,在应用程序对状态的改变做出响应之后,选择器将会被重置,并将重复这个过程。
  10. ByteBuf内存模式
    • 堆缓冲区
      • 将数据存储在JVM的堆空间,能在没有使用池化的情况下提供快速的内存分配和释放
    • 直接缓冲区
      • 相对基于堆的缓冲区,主要缺点是分配和释放都比较昂贵
    • 复合缓冲区
  11. ByteBuf读写操作
    • get()set()操作,从给定的索引开始,并且保持索引不变
    • read()write()操作,从给定索引开始,会根据已访问过的字节数对索引进行调整
  12. 在ChannelPipeline中将ChannelHandler链接在一起以组织处理逻辑,通过每一个ChannelHandler都是通过它的EventLoop(I/O线程)来处理传递给它的事件。
  13. 每一个新创建的Channel都将会被分配一个新的ChannelPipeline,这项关联是永久性的,Channel既不能附加另外一个ChannelPipeline也不能分离其当前的。
  14. ChannelHandlerContext代表了ChannelHandlerChannelPipeline之间的关系,每当有ChannelHandler添加到ChannelPipeline中时,都会创建ChannelHandlerContext。ChannelHandlerContext主要功能是管理它所关联的ChannelHandler和在同一个ChannelPipeline中的其它ChannelHandler之间的交互。
  15. 一个ChannelHandler可以从属于多个ChannelPipeline,所以它也可以绑定到多个ChannelHandlerContext实例。用于这种用法的ChannelHandler必须要使用@Sharable注解标注。
  16. EventLoop实际上是对java.util.concurrent.ScheduledExecutorService的扩展,执行Runnable任务。
  17. 在Netty4中,所有的I/O操作和事件都由已经被分配给了EventLoop的那个Thread来处理。
  18. EventLoopGroup负责为每个新创建的Channel分配一个EventLoop,使用顺序循环(round-robin)的方式进行分配以获取一个均衡的分布,并且相同的EventLoop可能会被分配给多个Channel,一旦一个Channel被分配给一个EventLoop,它将在它的整个生命周期中都使用这个EventLoop(以及相关联的Thread)。
  19. 引导(Bootstrap)是指对一个应用程序进行配置,并使它运行起来。
  20. 在引导过程中,在调用bind()或者connect()之前,必须调用一下方法来设置所需组件:
    • group()
    • channel()或者channelFactory()
    • handler()
  21. ServerBootstrap在bind()方法被调用时创建了一个ServerChannel,并且该ServerChannel管理了多个Channel,这些Channel代表已被接受的连接。
  22. 编写Netty应用程序应该尽可能地重用EventLoop,以减少线程创建所带来的开销。
  23. 每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换,这种转换逻辑由编解码器处理。如果将消息看作是对于特定的应用程序具有具体含义的结构化的字节序列——它的数据。那么编码器是将消息转换为适合于传输的格式(最有可能的就是字节流);而对应的解码器则是将网络字节流转换回应用程序的消息格式。因此编码器操作出站数据,而解码器处理入站数据。

nettyinaction's People

Contributors

huhuics avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.