- I . SelectionKey 简介
- II . SelectionKey 事件简介
- III . SelectionKey 常用 API 简介
1 . 通道注册给选择器 : 通道 ( Channel ) 注册给 选择器 ( Selector ) , 该通道就会纳入到该 选择器 ( Selector ) 管理范畴 , 选择器 ( Selector ) 可以监听通道的事件 ;
被注册的通道说明 : 这个 通道 ( Channel ) 即可以是 服务器套接字通道 ( ServerSocketChannel ) , 也可以是 套接字通道 ( SocketChannel ) ;
2 . 选择器真实类型 : 选择器 ( Selector ) 的 Selector 类是抽象类 , 其实例化的 真实类型是 WindowsSelectorImpl ;
3 . 选择器 ( Selector ) 管理 通道 ( Channel ) 的方式 : 当 通道 ( Channel ) 注册给 选择器 ( Selector ) 后 , 会返回 SelectionKey , 并将该 SelectionKey 放入 选择器 ( Selector ) 中的 HashSet keys 集合中 , 这个集合中存放了所有注册给该 选择器 ( Selector ) 的通道所代表的 SelectionKey ;
4 . 获取有事件发生的通道对应的 SelectionKey 集合 : 当 选择器 ( Selector ) 监听到有事件发生 , 此时只能监听到事件发生的个数 , 不知道具体的情况 ; 这就需要自己去 调用 选择器 ( Selector ) 的 selectedKeys() 方法 , 此时返回的是 Set 类型的集合 , 因为同事可能有多个通道有事件发生 , 这里可以一次性处理多个通道的事件 ;
II . SelectionKey 事件简介SelectionKey 中的事件 , 就是 选择器 ( Selector ) 注册通道时 , 需要指明 , 监听这个通道的哪些事件 ;
SelectionKey 中定义了四种事件 : 数据读取 ( OP_READ ) , 数据写出 ( OP_WRITE ) , 连接 ( OP_CONNECT ) , 接受连接 ( OP_ACCEPT ) ;
1 . 接受连接 ( OP_ACCEPT ) 事件 :
① 适用场景 : 服务器端 服务器套接字通道 ( ServerSocketChannel ) 注册该事件给 选择器 ( Selector ) , 选择器 ( Selector ) 可以监听到客户端的连接请求 ;
② 代码示例 : 下面的代码作用是 , 将 ServerSocketChannel 通道的 SelectionKey.OP_ACCEPT 事件注册给 选择器 ( Selector ) , 当有客户端连接服务器的时候 , 就会触发 选择器 的监听方法 ;
//将 serverSocketChannel 通道注册给 选择器 ( Selector ), 这里注册连接事件
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
③ OP_ACCEPT 常量原型 : 该常量定义在 SelectionKey.java 类中 , 该值的大小是 1
- 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
- 【Android Gradle 插件】Gradle 构建生命周期 ③ ( BuildListener 构建监听器 | TaskExecutionGraphListener 任务执行图监听器 )
- 【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
- 【Android Gradle 插件】Gradle 构建生命周期 ① ( 分析构建脚本 | 执行初始化配置 | 执行 Gradle 任务 | Project#beforeEvaluate 函数 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑨ ( 控制 Gradle 执行任务顺序 | Task#finalizedBy 函数 | 控制 Gradle 执行任务顺序示例分析 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑧ ( 控制 Gradle 执行任务顺序 | Task#shouldRunAfter 函数 | 三个函数使用场景对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ⑦ ( 控制 Gradle 执行任务顺序 | Task#dependsOn 函数 | Task#mustRunAfter 函数 )
- 【数学分析】集合 ① ( 集合概念 | 集合表示 | 常用的数集合 | 集合的表示 )
- 【数学分析】学科简介 ( 初等数学缺陷 | 微分与积分 | 学习数学分析的目的 | 数学分析与高等数学对比 )
- 【Android Gradle 插件】自定义 Gradle 任务 ③ ( Gradle 自定义任务创建方法 Project#task 函数 | Task#doFirst 函数用法 )