Netty入门学习笔记(二)--初尝IO

学前准备

学习 Netty 需要一定的 java 基础,特别是有关 IO 方面的知识,了解基本的 IO 模型,特别是 NIO 模型(Netty 以 NIO 作为基础进行封装),更好的理解 Netty 的基本原理。

IO 模型介绍

BIO(同步阻塞IO)

BIO 介绍

BIO 是 JDK 1.4 前使用的网络 IO 模型,但由于其每个客户端连接都为一个其分配一个线程的特性,并且每个连接并非都是在传输数据,造成服务器资源大量的消耗。

改进点:在此基础上新增一个线程池,可以保证一定程度上减少资源消耗,但依旧无法解决无效连接问题。

BIO 模型

BIO模型

BIO使用场景

BIO 由于其阻塞的特性,实际生产中使用场景较少。

  1. 适合极少人用,但是每次使用都传输大量数据的场景。

NIO(同步非阻塞IO)

NIO 介绍

NIO (同步非阻塞IO),也叫做 New IO 或者 Non IO。NIO 解决了 BIO 存在的资源浪费问题,不再是一个连接对应服务器一个线程。而是引入 selectorchannelBuffer 等组件,支持一个线程管理多个客户端。
简单理解:Selector 是一个轨道总控制室,Channel 是铁路轨道,Buffer是火车。火车开进轨道后,轨道就通知轨道总控制室,这时轨道总控制室就知道哪条轨道在使用。

Selector(选择器)

选择器,监听 channel 通道中的事件。如果 channel 中有事件推送,感知后处理该通道数据。

Channel(通道)

Channel 通道,与 Buffer 是一对一关系。Channel 提供的 read 和 write 方法都可以将通道中数据读和写到 Buffer 中。

Buffer(缓冲区)

Buffer 缓存区,与 BIO 不同,BIO 中一次只能使用一种,要么是输入流,要么是输出流。Buffer 则即可写也可读,在需要写操作是,调用 filp 方法进行状态切换。

NIO 模型

NIO 模型

NIO使用场景
  1. 大量连接的应用,比如:应用服务器

AIO(异步非阻塞的IO)

AIO 介绍

AIO 才是真正意义异步操作,用户在发起请求后,在操作系统内核对请求数据进行处理,处理完毕后在通知应用程序,充分利用操作系统提供的并发能力,将异步操作收益最大化。

补充:
平时所说的异步编程,基本上是说 NIO 方面的编写。

AIO 模型

AIO 模型

AIO使用场景

AIO 属于真正意义的的异步编程。其适用场景主要在需要操作系统支持的场景。

  1. 文件服务器:需要操作系统去支持去读取或操作文件等

额外学习

操作系统中内核态与用户态是啥?

内核态用户态可以理解为一个是管理员权限和一个是用户权限

用户态:

操作范围只能在内存中,由于是内存中操作,读写速度极快,但是无法操作内存以外的能力。

内核态:

可以调用硬件外设,比如:硬盘等。读写速度较慢,操作范围广。

有时候系统响应速度慢,可能的原因是线程在内核态与用户态间频繁切换,造成资源浪费。

什么是同步IO与异步IO?

同步IO:

客户端发起 IO 请求后。这时,用户态是没有权限去操作磁盘,需要切换到内核态,内核态操作磁盘将数据拷贝到用户空间(内存),最后切换回用户态进行数据处理。

简单来说:同步 IO 需要操作系统将数据准备好后,才可以进行下一步操作。

异步IO:

客户端发起 IO 请求后,用户线程从用户态切换内核态这个不变。但是线程继续执行,不阻塞,直到内核态将 IO 操作数据准备完毕后,通知用户线程或者通知某个回调函数。内核态操作 IO 期间,用户线程不需要阻塞等待内核态 IO 完成。

简单来说:异步 IO 提交后,无需阻塞等待,只需在 IO 操作完成后通知自己,在进行后续处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Netty-WebSocket-Spring-Boot-Starter是一个用于将Websocket集成到Spring Boot应用程序中的库。它使用Netty作为底层框架,提供了一种快速和可靠的方式来处理异步通信。 这个库提供了一种简单的方法来创建Websocket端点,只需要使用注释和POJO类即可。在这些端点上可以添加动态的事件处理程序,以处理连接、断开连接和消息事件等。 此外,Netty-WebSocket-Spring-Boot-Starter还包括了一些安全性的特性,如基于令牌的授权和XSS保护,可以帮助您保持您的Websocket应用程序安全。 总的来说,Netty-WebSocket-Spring-Boot-Starter提供了一种快速和易于使用的方式来构建Websocket应用程序,使得它成为应用程序开发人员的有用工具。 ### 回答2: netty-websocket-spring-boot-starter 是一个开源的 Java Web 开发工具包,主要基于 Netty 框架实现了 WebSocket 协议的支持,同时集成了 Spring Boot 框架,使得开发者可以更加方便地搭建 WebSocket 服务器。 该工具包提供了 WebSocketServer 配置类,通过在 Spring Boot 的启动配置类中调用 WebSocketServer 配置类,即可启动 WebSocket 服务器。同时,该工具包还提供了多种配置参数,如端口号、URI 路径、SSL 配置、认证配置等等,可以根据业务需求进行自定义配置。 此外,该工具包还提供了一些可扩展的接口和抽象类,如 WebSocketHandler、ChannelHandlerAdapter 等,可以通过继承和实现这些接口和抽象类来实现业务逻辑的处理和拓展。 总的来说,netty-websocket-spring-boot-starter 提供了一个高效、简单、易用的 WebSocket 服务器开发框架,可以减少开发者的开发成本和工作量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值