前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty高性能网络通信:NIO

Netty高性能网络通信:NIO

作者头像
冷环渊
发布2021-11-15 15:55:30
5970
发布2021-11-15 15:55:30
举报

认识Netty

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

  • 自定义通信协议
  • 自定义编码/解码字节流

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

  1. java.net + java .io
  2. java.nio
  3. Mina /Grizzly

Netty的特点

并发高

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

传输快

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

封装好

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

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

认识NIO

BIO - BlockingIO 同步阻塞 NIO - New IO / Non-Blocking IO 同步非阻塞 AIO - Asynchronous IO 异步非阻塞

同步和异步,关注的是消息通知的机制 阻塞和非阻塞,关注的是等待消息过程中的状态

多路复用的模型

三大元素:Channel 、Buffer、Selector

Channel

FileChannel 文件管道的数据 Pipe.SinkChannel Pipe.SourceChannel 线程间通信的管道 ServerSocketChannel SocketChannel 用于TCP网络通信的管道 DatagramChannel 用于UDP网络通信的管道

Buffer

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维护的是,通道和事件之间的关联关系。

Selector,管理被注册的通道集合,以及他们的状态 SelectableChannel,是一个抽象类,提供了通道可被选择需要实现的api。 FileChannel就不是可选择的,Socket相关的通道都是可选择的 一个通道可以被注册到多个选择器上吗? 可以的 多个通道可以注册到一个选择器上,但一个通道只能在一个选择器中注册一次

SelectionKey,封装了要监听的事件,连接、接收、读、写。 一方面,Selector关心通道要处理哪些事件 另一方面,当事件触发时,通道要处理哪些事件

【使用方式】

a、首先通过open方法,获取通道,将通道设置为非阻塞的 b、通过open方法,获取选择器,将通道注册进选择器中,伴随设置通道要处理的事件(OP_ACCEPT) c、轮询选择器,当前是否有要处理的操作 select() > 0? 如果有,要获取,待处理操作的集合Set , 进行遍历 遍历到SelectionKey时,判断对应哪种操作,不同的操作设置不同的处理方式 如OP_ACCEPT,接收客户端通道并进行注册,监听后续处理的事件,如OP_WRITE 如OP_WRITE,通过key的方法获取通道本身,读取数据并继续监听事件,如OP_READ

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 认识Netty
    • Netty的特点
      • 认识NIO
        • Channel
        • Buffer
        • 【使用原理】
        • Selector
        • 【使用方式】
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档