【Netty】学习笔记(上)

概念

  1. 基于TCP、异步、事件驱动的网络框架;
  2. TCP/IP --> 原生JDK(Java的IO和网络编程) --> NIO --> Netty;

应用场景

  1. Netty是异步高性能的通信框架,往往被RPC框架使用;
  2. 阿里云分布式框架Dubbo;
  3. 游戏;
  4. 地图框架
  5. AVRO(RPC),使用Netty Service进行二次封装;
  6. Akka;
  7. Flink;
  8. Spark;

书籍

  1. 『Netty in Action』实战
  2. 『Netty权威指南』,知识点多,但其基于Netty5,目前已经过时不在维护;

I/O模型

  1. I/O模型决定性能
  2. Java BIO,同步阻塞,造成线程浪费或连接浪费;
  3. Java NIO,同步非阻塞,一个线程处理多个连接(维护一个Selector),并把连接注册到一个选择器中,多路复用模型,事件驱动;后期连接多了就不止一个线程而是多个线程以及多个Selector(BOSS);
  4. Java AIO(NIO2.0),引入异步通道,采用了Proactor模式,目前还没有广泛应用,JDK1.7引入,有效的请求才启动线程,特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用;

场景辨析

BIO

连接数较少,且架构较固定,对服务器资源要求较高,并发局限于应用,JDK 1.4以前的唯一选择;

NIO

连接数目较多连接较短的操作,比如聊天服务器、弹幕系统、服务器之间的通讯,JDK 1.4之后支持;

AIO

连接数目较多且连接较长(重操作)的架构,比如相册服务器,调用OS参与并发操作,JDK 7之后支持;

『Netty基于NIO』

BIO详解

传统的BIO可以通过线程池进行改善,实现多个客户连接服务器。

流程

  1. 启动ServerSocket
  2. 建立一个线程与每个连接进行通讯
  3. 客户发出请求后咨询服务器线程是否有响应,没有会等待或者判断被拒绝
  4. 如果有响应,客户端会等待请求结束后继续执行(阻塞)

NIO详解

同步非阻塞,JDK1.4之后,Channel、Buffer、Selector三个核心组件。面向缓冲区、或者面向块编程的,增加了处理的灵活性。

组件说明

Channel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胡同的诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值