表哥有话说——Netty(1)

一.Netty是什么?

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

简言之,事件驱动的,异步的,应用于网络编程的框架,可开发服务器端和客户端的应用。

二.谁在用Netty?

Netty被很多如雷贯耳的项目作为其底层通讯框架在使用,比如:Dubbo、Zookeeper、Elasticsearch、RocketMQ、Grpc、Spark、Spring5等大型开源项目等。

三.执行流程

理解Netty的执行流程前先理解以下概念:

Channel
管道,其为对socket的封装,集成了一组API,简化了对socket的操作。
EventLoopGroup
其是一个EventLoop线程池,包含了很多Eventloop。EventLoop是一个线程驱动,其生命周期内只会绑定一个线程,用来处理一个Channel内的所有IO事件。比如用户连接请求,及对用户请求处理的所有事件。
ChannelPipeline、ChannelHandler
ChannelHandler是对Channel数据的处理器,这些处理器可以系统本身定义的也可以是用户自定义的。而这些处理器按序添加到ChannelPipeline对象后会按添加顺序依次对Channel中的数据进行处理。
ServerBootStrap、BootStrap
ServerBootStrap、BootStrap的作用分别是在server和client端对Netty进行配置,并将所有组件关联起来。
ChannelFuture
Netty中所有的I/O操作都是异步的,即操作不会立即得到返回结果,所以Netty中定义了一个ChannelFuture对象作为这个异步操作的“代言人”,表示异步操作本身。如果想获取到该异步操作的返回值,可以通过该异步操作对象的addListener()方法为该异步操作添加监听器,为其注册回调:当结果出来后马上调用执行。Netty的异步编程模型都是建立在Future与回调概念之上的。

清楚以上概念后则可理解Netty的执行流程了:
1.通过ServerBootStrap、ChannelFuture等启动server后,从一个EventLoopGroup中获得一个NIOEventLoop监听指定port,进行监听,等待客户端的连接;
2.BootStrap、ChannelFuturClient创建client连接指定port,并创建Channel;
3.Netty通过另一个EventLoopGroup中选择一个NIOEventLoop与上面的Channel绑定,处理该Channel中的所有操作;
4.client通过Channel向server发送数据包ByteBuf;
5.server的pipeline对象里的处理器handler依次对Channel的数据包进行处理;并将处理过的数据包通过Channel发送给client;这其中涉及到拆包和粘包。

OK,到此清楚Netty的执行流程后,就可直接手撕代码了,下集再续~
表哥有话说——Netty(1)
大表哥的剑 2020.8.8