netty简介

1.1.1 netty简介

  • Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能服务器和客户端。
  • Netty 是一个 NIO 客户机-服务器框架,它支持快速、简单地开发网络应用程序,如服务器和客户机。它大大简化了网络编程,如 TCP 和 UDP 套接字服务器。
  • “快速和简单”并不意味着生成的应用程序将受到可维护性或性能问题的影响。Netty
    经过精心设计,并积累了许多协议(如 ftp、smtp、http)的实施经验,以及各种二进
    制和基于文本的遗留协议。因此,Netty 成功地找到了一种方法,在不妥协的情况下实
    现了易于开发、性能、稳定性和灵活性。

1.1.2 谁在使用netty

Dubbo、zk、RocketMQ、ElasticSearch、Spring5(对 HTTP 协议的实现)、GRpc、Spark 等大
型开源项目都在使用 Netty 作为底层通讯框架。

1.1.3 Netty 中的核心概念

(1) channel

  • 管道,其是对 Socket 的封装,其包含了一组 API,大大简化了直接与 Socket 进行操作的
    复杂性。

(2) EventLoopGroup

  • EventLoopGroup 是一个 EventLoop 池,包含很多的 EventLoop。
  • Netty 为每个 Channel 分配了一个 EventLoop,用于处理用户连接请求、对用户请求的处理等所有事件。EventLoop 本身只是一个线程驱动,在其生命周期内只会绑定一个线程,让该线程处理一个 Channel 的所有 IO 事件。
  • 一个 Channel 一旦与一个 EventLoop 相绑定,那么在 Channel 的整个生命周期内是不能 改变的。一个EventLoop 可以与多个 Channel 绑定。即 Channel 与 EventLoop 的关系是 n:1, 而EventLoop 与线程的关系是 1:1。

(3)ServerBootStrap

  • 用于配置整个 Netty 代码,将各个组件关联起来。服务端使用的是 ServerBootStrap,而
    客户端使用的是则 BootStrap。

(4)ChannelHandler 与 ChannelPipeline

  • ChannelHandler 是对 Channel 中数据的处理器,这些处理器可以是系统本身定义好的编
    解码器,也可以是用户自定义的。这些处理器会被统一添加到一个 ChannelPipeline 的对象中,然后按照添加的顺序对 Channel 中的数据进行依次处理。

(5)ChannelFuture

  • Netty 中所有的 I/O 操作都是异步的,即操作不会立即得到返回结果,所以 Netty 中定义
    了一个 ChannelFuture 对象作为这个异步操作的“代言人”,表示异步操作本身。如果想获取到该异步操作的返回值,可以通过该异步操作对象的 addListener()方法为该异步操作添加监听器,为其注册回调:当结果出来后马上调用执行。
  • Netty 的异步编程模型都是建立在 Future 与回调概念之上的。

1.1.4 Netty 执行流程

  1. Server启动,Netty从parentGroup中选出一个NioEventLoop对指定port的连接进行监听
  2. Client启动,Netty从eventLoopGroup中选出一个NioEventLoop对连接的server并处理server发送过来的数据
  3. Client连接指定Server的port,创建channel
  4. Netty从childGroup中选出一个NioEventLoop与该channel绑定,用于处理该channel中的所有操作
  5. Client通过channel向Server发送数据包
  6. pipeline中的处理器一次对Channel中的数据包进行处理
  7. Server如需向Client发送数据,则需将数据经pipeline中的处理器处理成Bytebuf数据包
  8. Server将数据包通过Channel发送给client
  9. Client端pipeline中的处理器依次对channel中的数据包进行处理

你可能感兴趣的:(rpc,netty,netty,socket)