NIO学习计划之netty入门教程

前言:

  学习本篇文章之前需要先对基本的NIO模型有简单的认识。

  最近接触到一个dubbo的项目,其中自定义了不少通讯协议,然后东拉西扯的就关注到了netty这个东西(其中用到的很多协议都是通过dubbo SPI扩展,再在netty基础上做的协议定义),所以相对它先做个了解。
  由于netty在常规业务项目中基本用不到,而且入门门槛偏高,相较于传统BIO的编码学习较难,也导致了netty在一般项目中很那见到其身影。

  这篇文中主要讲netty的一些组件作用…

一、netty的介绍

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。

二、netty的工作流程

服务器启动->客户端连接-> 服务器处理连接-> 服务器处理客户端数据<—> 客户端处理服务器数据
NIO学习计划之netty入门教程_第1张图片
1、创建ServerBootStrap实例
2、设置并绑定Reactor线程池:EventLoopGroup,EventLoop就是处理所有注册到本线程的Selector上面的Channel
3、设置并绑定服务端的channel
4、创建处理网络事件的ChannelPipeline和handler,网络时间以流的形式在其中流转,handler完成多数的功能定制:比如编解码 SSl安全认证
5、绑定并启动监听端口
6、当轮训到准备就绪的channel后,由Reactor线程:NioEventLoop执行pipline中的方法,最终调度并执行channelHandler

以上文本流程总结来自链接:https://juejin.im/post/5bf8fbd4f265da617006cab8

三、netty的各个组件
  1. ByteBuf缓冲区
  2. Encoder(编码器)、Eecoder(解码器)和Codec(编解码器)
  3. Handler业务处理器
  4. Channel socket的抽象
  5. EventLoop 任务分发与处理,并发
  6. ChannelHandler和ChannelPipeline流程控制
  7. Bootstrap(客户端) 和 ServerBootstrap(服务端)
四、netty的简单编码案例

开发第一个Netty应用程序

netty官方API:
https://netty.io/4.1/api/index.html

优质netty文章推荐:
https://www.cnblogs.com/cxxjohnson/p/9399831.html

其他相关知识点:

  • 拆包粘包问题的处理
  • 心跳监测与断线重连
  • netty特性之零拷贝

你可能感兴趣的:(TCP,网络,netty)