4.2 Selector

简介: 4.2 Selector

image.png

创建

Selector selector = Selector.open();

绑定 Channel 事件

也称之为注册事件,绑定的事件 selector 才会关心

channel.configureBlocking(false); SelectionKey key = channel.register(selector, 绑定事件);

  • channel 必须工作在非阻塞模式
  • FileChannel 没有非阻塞模式,因此不能配合 selector 一起使用
  • 绑定的事件类型可以有
  • connect - 客户端连接成功时触发
  • accept - 服务器端成功接受连接时触发
  • read - 数据可读入时触发,有因为接收能力弱,数据暂不能读入的情况
  • write - 数据可写出时触发,有因为发送能力弱,数据暂不能写出的情况

监听 Channel 事件

可以通过下面三种方法来监听是否有事件发生,方法的返回值代表有多少 channel 发生了事件

方法1,阻塞直到绑定事件发生 int count = selector.select(); 方法2,阻塞直到绑定事件发生,或是超时(时间单位为 ms) int count = selector.select(long timeout); 方法3,不会阻塞,也就是不管有没有事件,立刻返回,自己根据返回值检查是否有事件


int count = selector.selectNow();

💡 select 何时不阻塞

  • 事件发生时
  • 客户端发起连接请求,会触发 accept 事件
  • 客户端发送数据过来,客户端正常、异常关闭时,都会触发 read 事件,另外如果发送的数据大于 buffer 缓冲区,会触发多次读取事件
  • channel 可写,会触发 write 事件
  • 在 linux 下 nio bug 发生时
  • 调用 selector.wakeup()
  • 调用 selector.close()
  • selector 所在线程 interrup



目录
相关文章
|
SQL 运维 负载均衡
双活中心高效同步机制
双活中心高效同步机制
700 1
|
存储 设计模式 缓存
DDD领域驱动设计实战-分层架构及代码目录结构(下)
DDD领域驱动设计实战-分层架构及代码目录结构
2104 0
DDD领域驱动设计实战-分层架构及代码目录结构(下)
|
人工智能 大数据 调度
【云栖2023】林伟:大数据AI一体化的解读
本文根据2023云栖大会阿里云研究员,阿里云计算平台事业部首席架构师,阿里云人工智能平台PAI和大数据开发治理平台DataWorks负责人---林伟演讲实录整理而成,演讲主题:”大数据AI一体化的解读“。
|
存储
Postman 接口测试配置 Pre-request Script
Postman 接口测试配置 Pre-request Script
714 5
Postman 接口测试配置 Pre-request Script
|
前端开发 容器
HTML <div> 和<span>
HTML <div> 和<span>
824 0
|
JavaScript 程序员 Swift
The compiler is unable to type-check this expression in reasonable time; try breaking up the express
The compiler is unable to type-check this expression in reasonable time; try breaking up the express
290 0
|
设计模式 供应链 测试技术
架构进阶之路:复杂业务开发与领域驱动设计
以下是在现公司,给成员做分享的资料。业务案例来自:一文教会你如何写复杂业务代码。作者:张建飞,进行了重新整理。
514 0
|
存储 消息中间件 调度
Android | WMS 解析(一)(上)
Android | WMS 解析(一)(上)
Android | WMS 解析(一)(上)
|
Ubuntu 网络协议 Linux
【Matter】Nordic & Mattter(开发大纲)
【Matter】Nordic & Mattter(开发大纲)
753 0