NIO 三大件 - Netty前置基础
2021-12-11 14:03:51 18 举报
Netty基础
作者其他创作
大纲/内容
选择器的使命是完成IO的多路复用,其主要工作是通道的注册与监听、事件查询。
读写
Channel类似\"流\
Channel(ip:port)
Channel(port)
epoll
1FileChannel 文件数据的读写、2SocketChannel 实现SocketTPC的读写3ServerSocketCHannel 服务器监听TCP请求4DatagramChannel 数据报 UDP的读写。
Handler
网络传输
使用Reactor对NIO的封装
通道注册选择器以及对应状态: Channel.register(Selector sel,int ops)
(1)可读:SelectionKey.OP_READ SocketChannel通道有数据可读,则会发生“读就绪”(OP_READ)事件(2)可写:SelectionKey.OP_WRITE 一个等待写入数据的SocketChannel通道,会发生写就绪(OP_WRITE)事件(3)连接:SelectionKey.OP_CONNECT 产生于:SocketChannel传输通道,如果完成了和对端的三次握手过程,则会发生“连接就绪”(OP_CONNECT)事件(4)接收:SelectionKey.OP_ACCEPT 产生于:个ServerSocketChannel服务器连接监听通道,在监听到一个新连接的到来时,则会发生“接收就绪”(OP_ACCEPT)的事件
Buffer
Reactor
linux 底层支持
Channel
核心函数(通过操作核心变量来实现的):allocate(n) 分配大小put() 写:元素放入bufferget() 读:获取buffer内容flip() 读写模式反转mark() 标记状态rewind() 返回操作clear() 清空
根据状态通过buffer执行业务
底层是一个数组:如ByteBuffer的覅曾是final byte[] hb,核心变量(下标指针):int position int limit int capacity
Client
基于Buffer的网络实现
Selector
Server
业务处理
NIO
Netty
设计模式
Java包
从通道中读写
java.nio.Channel
监听
java.nio.Buffer 直接new
1 从文件流中获取通道 new FileInputStream().getChannel() 2 从候选键中获取通道 new Selector().getChannel()3 从通道中读取 length = channel.read(buf)
继承自SelectableChannel的通道才可以被Selector监听状态
充分利用系统资源、最大限度地减少阻塞
常用类型:ByteBuffer、其他的还有:CharBuffer、DoubleBuffer......MappedByteBuffer
java.nio.Selector
分发
0 条评论
下一页