netty必会基础知识点

一、网络编程相关概念

网络通信模型举例特点
BIO阻塞排队点餐,阻塞等待取餐耗资源,效率低,基本已被废弃
NIO非阻塞先取号,等待被叫,再去取餐主流应用
AIO异步包厢,点餐后等待端上来就行1、windows实现成熟,但windows很少用来作为服务器;
2、linux常用来作为服务器,但AIO实现不够成熟;
3、linux下AIO相比NIO性能提升不够明显;
类型特点
阻塞1、读取数据没准备好时,等待数据返回(死等)
2、写操作时缓冲区数据满了,等待数据被消费(死等);
非阻塞读取数据没准备好或写缓冲满时,都直接返回。
类型特点
同步数据准备就绪后需要调用方主动来读就是同步;
异步数据准备好在回调给程序就是异步

二、BIO与NIO

Jdk 1.4之前,基于Java的所有Socket通信都采用了BIO模式,服务端针对每个连接分配一个线程。
当并发访问量增大时,成千上万的线程会压垮服务器,BIO模型开发的服务端只有通过硬件的不断扩容来满足高并发和低时延,它极大地增加了企业的成本。

1、NIO编程的优点

1、服务端实现方式为每个请求分配一个通道(Channel),每个连接请求都会注册到Selector上,只有Selector轮询到该连接有IO 请求时才会启动一个线程。
2、Channel是数据连接的通道,数据可以从Channel读到Buffer(缓冲区),也可以从Buffer写到Channel。
3、服务端通过Selector(单一线程)就可以实现对大量Channel的监控和维护。

​​在这里插入图片描述

三、Netty的核心组件

Netty核心组件

四、应用场景有哪些?

在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明它已经完全能够满足不同行业的商业应用了。
数据库:Cassandra
大数据处理:Spark、Hadoop
Message Queue:RocketMQ
检索:Elasticsearch
框架:gRPC、Apache Dubbo、Spring5
分布式协调器:ZooKeeper
工具类:async-http-client
其他参考:https://netty.io/wiki/adopters.html

五、为什么用Netty?

jdk提供的NIO API开发异步通信十分复杂,Netty是一个通信框架,API相当简单,开发容易上手。

  1. Netty做得更多
  • 支持常用应用层协议;
  • 解决传输问题:粘包、半包现象;
  • 支持流量整形;
  • 完善的断连、Idle等异常处理等。
  1. Netty做得更好之一:规避JDK NIO bug:

  2. Netty做得更好之二:API更友好更强大

JDK的NIO一些API不够友好,功能薄弱,例如ByteBuffer-> Netty’s ByteBuf

除了NIO外,也提供了其他一些增强:Theadlocal-> Netty’s FastThreadLocal

六、Reactor的三种模式

  1. Reactor单线程
    单个线程处理所有事情,如饭店迎宾、点菜、做菜、上菜、结账、送客一系列操作

  2. Reactor多线程 多线程分别处理以上所有事情

  3. 主从Reactor
    一个线程专门处理连接建立和关闭,其他线程处理业务bossGroup和workerGroup

七、二次编解码器

一次解码器 ByteToMessageDecoder
二次解码器 MessageToMessageDecoder
二次解码器

八、心跳keepalive+idle

keepalive为心跳消息,idle为时间间隔。
Idle监测,只是负责诊断,诊断后作出不同的行为。

二者要结合起来使用。

1、Server端开启TCP keepalive

bootstrap.childOption(ChannelOption.SO_KEEPALIVE,true) <br/>
bootstrap.childOption(NioChannelOption.of(StandardSocketOptions.SO_KEEPALIVE), true)
// 提示:.option(ChannelOption.SO_KEEPALIVE,true) 存在但是无效

2、 开启不同的Idle Check:

ch.pipeline().addLast(“idleCheckHandler", new IdleStateHandler(0, 20, 0, TimeUnit.SECONDS));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值