java nio 写事件_Java NIO
java Nio
Selector 选择器
Buffer 缓冲器
Channel 通道
Selector是NIO的核心,是channel的管理者,通过执行select()阻塞方式,监听是否有channel准备好,一旦有数据可读,此方法的返回值是SelectionKey的数量。服务端通常会死循环执行select()方法,直到有channel准备就绪,然后开始工作,每个channel都会和Selector绑定一个事件,然后生成一个SelectionKey的对象。
channel和Selector绑定时,channel必须是非阻塞模式,而FileChannel不能切换到非阻塞模式,因为它不能套接字通道,所以FileChannel不能和Selector绑定事件。
在NIO中一共有四种事件:
1、SelectorKey.OP_CONNECT:连接事件
2、SelectorKey.OP_ACCEPT:接收事件
3、SelectorKey.OP_READ:读事件
4、SelectorKey.OP_WRITE:写事件
channel连接tcp端口和selector选择器,每次连接channel会新建一个吗,然后等准备好了就发送SelectionKey事件吗,有事件后channel读写到buffer吗?是这个顺序吗?
SelectionKey是Channel和Selector交互的核心组件,channel通过register绑定再selector上,并且注册为connect事件。Selector返回一个SelectionKey来检测channel事件,通过轮询判断事件类型,然后做相应操作,通过SelectionKey可以反过来拿到Channel和Selector。
tomcat NIO
connector
tomcat中Http11NioProtocol包含NioEndpoint实例,请求工作委托给NioEndpoint,tomcat在NioProtocol解析http请求时设计了三种线程,分别为Acceptor,Poller,Worker。
Acceptor run方法中包含执行过程。ServerSocketChannel执行阻塞接收操作,接收完成后setSocketOptions,设置为非阻塞,调用Poller的register方法,完成channel的注册。该方法的主要功能是利用传入的SocketChannel参数生成SecureNioChannel或者NioChannel,然后注册到Poller线程的selector中,注册中事件改为SelectionKey.OP_READ。
Poller线程,相当于Selector
Worker线程就是SocketProcessor用来处理实际业务请求,实现Runnable接口,通过线程池执行任务。
Container:
Container容器是所用servlet容器的父接口,也就是说作为一个servlet容器,首先必须要实现Container接口,每个tomcat服务器只能有唯一的根Container,Connector组件通过setContainer方法将Container容器和Connector关联起来。共有四种类型Container容器,分别对应不同概念的层次,每一层之间是父子的关系。
1、Engine:整个Catalina servlet引擎,标准实现为StandardEngine。
2、Host:表示包含一个或多个Context容器的虚拟主机,标准实现为StandardHost。
3、Context:表示一个web应用程序,一个Context可以有多个Wrapper,标准实现为StandardContext。
4、Wrapper:包装一个独立的Servlet容器,标准实现为StandardWrapper。
java nio 写事件_Java NIO相关推荐
- java nio 事件_Java NIO原理及实例
Java NIO是在jdk1.4开始使用的,它既可以说成"新I/O",也可以说成非阻塞式I/O.下面是java NIO的工作原理: 1. 由一个专门的线程来处理所有的 IO 事件, ...
- java nio 追加写文件_Java NIO写入文件
用NIO写文件,总结一下,主要有如下步骤: 1.打开通道. 2.包装到缓冲区. 3.写入文件. 4.不忘记关闭通道,关闭流.package what21.nio; import java.io.Fil ...
- java 双击触发事件_java鼠标双击事件怎么实现
很多人都学习过java,但是你知道java鼠标双击事件怎么实现吗,跟着学习啦小编一起学习ava鼠标双击事件. java鼠标双击事件的实现方法 鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中 ...
- java nio 追加写文件_Java NIO在文件末尾追加数据
[java]代码库import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import ja ...
- java 接口文件夹_Java NIO.2 使用Path接口来监听文件、文件夹变化
Java7对NIO进行了大的改进,新增了许多功能: •对文件系统的访问提供了全面的支持 •提供了基于异步Channel的IO 这些新增的IO功能简称为 NIO.2,依然在java.nio包下. 早期的 ...
- java nio底层实现_Java NIO 底层原理
一.概念说明 1.内核态(内核空间)和用户态(用户空间)的区别和联系? 用户空间是用户进程所在的内存区域,系统空间是操作系统所在的内存区域.为了保证内核的安全,处于用户态的程序只能访问用户空间,而处于 ...
- java nio 如何使用_Java NIO 系列教程(转)
原文中说了最重要的3个概念, Channel 通道 Buffer 缓冲区 Selector 选择器 其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步 ...
- java nio.2群发_JAVA NIO TCP SOCKET 聊天群发
以前都是用一般的socket编程,用线程来控制.最近突然用nio来做些东西. nio的好处我来说一下:第一,读写都是基于块的,效率高.第二,通过引入selector,简化了网络编程模型,异步非阻塞. ...
- java selector 源码_Java NIO核心组件-Selector和Channel
昨天我们介绍了一下SelectorProvider和IO multiplexing.特别是IO multiplexing中的epoll系统调用,是Linux版本的Java的NIO的核心实现. 那今天我 ...
最新文章
- 5折交叉验证_交叉验证:评估模型表现
- java exception源码_Java异常之 Error 和 Exception
- js new Date()不带时分秒时,时间变了 问题解决
- 人造神经元成功操纵植物,让捕蝇草强行闭合,脑机接口新思路打开丨Nature子刊...
- C#中调用API函数RegisterHotKey注册多个系统热键
- 解读GAN及其 2016 年度进展
- OD使用教程3(下) - 调试篇03|解密系列
- ​上海AI Lab罗格斯大学港中文提出CLIP-Adapter,用极简方式微调CLIP中的最少参数!...
- 中心对称又是轴对称的图形_2020广东省考行测备考:图形推理之对称知多少
- 如何在 16 英寸 MacBook Pro 内置或独立显示器上更改刷新率?
- mysql数据库基本知识
- latex表格自动换行
- 【百问网智能家居---基于单片机最小系统STM32F103C8T6_MINI的入门学习】
- 1小时赚300块,不打代码帮人做个吃鸡网页 [IVX实战第3篇]
- ctfshow 做题 萌新 模块(1)
- win10系统登录和服务器,win10系统如何登录服务器地址
- 我在绑定微信账号时出现了问题,提示该微信已绑定其他账号
- 电脑配件 - 如何选择电脑显示屏幕 - 学习/实践
- [增强现实]Unity制作AR增强现实--茶壶(亲测)
- JavaSE实现桌面屏幕下雪功能