01 -- Netty概述

Netty是什么?

异步事件驱动的网络应用框架,可以快速开发一个可维护的高性能的服务端和客户端。

都是谁在用Netty?

Dubbo、ZK、RocketMQ、ES、Spring5(对于Http协议的实现)、Spak等大型开源项目使用Netty作为底层通讯的实现。

Netty中的核心概念是什么?

1、Channel

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

通道:Channel   【https://www.cnblogs.com/myitnews/p/12213637.html

通道初始化器:ChannelInitializer   【https://www.cnblogs.com/myitnews/p/12213602.html

通道配置项:ChannelOption   【https://www.cnblogs.com/myitnews/p/12213098.html

2、EventLoopGroup

一个EventLoop池,包含很多EventLoop。

Netty为每一个Channel分配了一个EventLoop,用于处理用户连接请求、对用户请求的处理等所有事件。EventLoop本身只是一个线程驱动,在其生命周期内只会绑定一个线程,让该线程处理一个Channel的所有IO 事件。

一个Channel一单与一个EventLoop绑定,在整个生命周期内是不可以改变的。一个Channel只能绑定一个EventLoop,但一个EventLoop可以绑定多个Chanel,即EventLoop与Channel为 1:N 关系。而一个EventLoop与线程是 1:1 关系。

线程组:NioEventLoopGroup  【 https://www.cnblogs.com/myitnews/p/12212796.html

3、ServerBootStrap

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

启动配置类:Bootstrap 和 ServerBootstrap   【https://www.cnblogs.com/myitnews/p/12212807.html

4、ChannelHandler 和 ChannelPipeline

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

通道处理器:ChannelHandler   【https://www.cnblogs.com/myitnews/p/12213568.html

通道管道线:ChannelPipeline  【https://www.cnblogs.com/myitnews/p/12213046.html

编码器(Encoder)和 解码器(Decoder)   【https://www.cnblogs.com/myitnews/p/12213691.html

6、ChannelFuture

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

Netty的异步编程模型都是建立在Future与回调概念之上的。

执行结果:Future 和 ChannelFuture   【https://www.cnblogs.com/myitnews/p/12213655.html

 

Netty执行流程:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章