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】