Netty高性能网络通信:NIO

简介: Netty高性能网络通信:NIO

认识Netty

Netty 网络编程框架 他可以做到什么?


自定义通信协议

自定义编码/解码字节流

没有netty之前我们是用什么的?


java.net + java .io

java.nio

Mina /Grizzly


Netty的特点

并发高

基于 NIO网络通信框架,比较BIO性能得到了提升


传输快

NIO的特性之一,零拷贝,堆内存之外开辟一块内存提高传输速度,


封装好

优秀的API设计和灵活的代码调用

可以看到性能的提升都离不开NIO那NIO到底是什么?


认识NIO

BIO - BlockingIO 同步阻塞

NIO - New IO / Non-Blocking IO 同步非阻塞

AIO - Asynchronous IO 异步非阻塞


同步和异步,关注的是消息通知的机制

阻塞和非阻塞,关注的是等待消息过程中的状态

1.png



多路复用的模型

2.png



三大元素:Channel 、Buffer、Selector


Channel

FileChannel 文件管道的数据

Pipe.SinkChannel

Pipe.SourceChannel 线程间通信的管道

ServerSocketChannel

SocketChannel 用于TCP网络通信的管道

DatagramChannel 用于UDP网络通信的管道


Buffer

3.png


capacity 总体容量大小

limit 存储容量的大小,是可读写和不可读写的界线

position 已读容量的大小,已读和未读区域的界线


【使用原理】

a) 初始化,给定总容量,position=0, limit=capacity

b) 当使用put方法存入数据是,通过position来记录存储的容量变化,position不断后移,直到存储结束(写完成)

c)写完成需要调用flip方法刷新,limit=position,position=0

保障limit记录的是可读写区域的大小,position已读部分重置为空

d) 读数据直到读完成,需要调用clear方法,position=0, limit=capacity


Selector

三个元素: Selector选择器、SelectableChannel可选择的通道、SelectionKey选择键


本质上,Selector是监听器,监听的是通道是否有我们关心的操作产生,操作对应的是事件(连接、接收、读/写),使用SelectionKey代表具体的事件,在确保通道是可选择的情况下,将通道注册进选择器中,此时Selector维护的是,通道和事件之间的关联关系。

4.png



Selector,管理被注册的通道集合,以及他们的状态

SelectableChannel,是一个抽象类,提供了通道可被选择需要实现的api。

FileChannel就不是可选择的,Socket相关的通道都是可选择的

一个通道可以被注册到多个选择器上吗? 可以的

多个通道可以注册到一个选择器上,但一个通道只能在一个选择器中注册一次


SelectionKey,封装了要监听的事件,连接、接收、读、写。

一方面,Selector关心通道要处理哪些事件

另一方面,当事件触发时,通道要处理哪些事件


【使用方式】

a、首先通过open方法,获取通道,将通道设置为非阻塞的

b、通过open方法,获取选择器,将通道注册进选择器中,伴随设置通道要处理的事件(OP_ACCEPT)

c、轮询选择器,当前是否有要处理的操作 select() > 0?

如果有,要获取,待处理操作的集合Set<SelectionKey> , 进行遍历

遍历到SelectionKey时,判断对应哪种操作,不同的操作设置不同的处理方式

如OP_ACCEPT,接收客户端通道并进行注册,监听后续处理的事件,如OP_WRITE

如OP_WRITE,通过key的方法获取通道本身,读取数据并继续监听事件,如OP_READ


相关文章
|
3月前
|
大数据 云计算
中国网络大会专题论坛 | 下一代超大规模高性能公共云网络
中国计算机学会ChinaNet上,阿里云洛神云网络将与知名学术届代表一起共话下一代超大规模高性能公共云网络的关键技术。
|
6天前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
|
2月前
|
JSON 算法 Java
Nettyの网络聊天室&扩展序列化算法
通过本文的介绍,我们详细讲解了如何使用Netty构建一个简单的网络聊天室,并扩展序列化算法以提高数据传输效率。Netty的高性能和灵活性使其成为实现各种网络应用的理想选择。希望本文能帮助您更好地理解和使用Netty进行网络编程。
52 12
|
2月前
|
数据采集 监控 安全
公司网络监控软件:Zig 语言底层优化保障系统高性能运行
在数字化时代,Zig 语言凭借出色的底层控制能力和高性能特性,为公司网络监控软件的优化提供了有力支持。从数据采集、连接管理到数据分析,Zig 语言确保系统高效稳定运行,精准处理海量网络数据,保障企业信息安全与业务连续性。
68 4
|
3月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
370 0
|
3月前
|
大数据 云计算
2024 CCF中国网络大会专题论坛丨下一代超大规模高性能公共云网络 精彩回顾
中国计算机学会ChinaNet上,阿里云洛神云网络将与知名学术届代表一起共话下一代超大规模高性能公共云网络的关键技术。
|
5月前
|
Java
Netty BIO/NIO/AIO介绍
Netty BIO/NIO/AIO介绍
|
存储 缓存 NoSQL
跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯一ID、红包、消息同步等功能,并且还支持集群部署。
13583 1

热门文章

最新文章