上一篇只是简单的介绍了一下NIO中的Selector。
这里我还是想再详细点。
通过Selector.open()方法,我们可以创建一个选择器(selector)。
通过channel.register()方法,我们把channel注册到Selector中。
register()方法中的参数:第一个参数selector:创建的选择器;第二个参数指定了对channel的什么事件感兴趣(SelectionKey.OP_CONNECT 连接事件,SelectionKey.OP_ACCEPT 确定事件,SelectionKey.OP_READ 读事件,SelectionKey.OP_WRITE 写事件)。
一个channel只能注册到一个Selector上。
将channel注册到同一个Selector多次,那么相当于更新参数。
SelectionKey:把channel注册到Selector时(调用register方法),会返回SelectionKey对象,此对象包含了:感兴趣的事件集,就绪的事件,channel实例,selector实例,attached object。
Selector的基本使用流程:
1,通过Selector.open()打开一个Selector。
2,将Channel注册到Selector中,并设置需要监听的事件。
3,不断循环:
3-1 调用select()方法---阻塞。
3-2 调用selector.selectedKeys()获取SelectionKey。
3-3 迭代每一个selectedkey
3-3-1 判断哪些IO事件就绪。
3-3-1-1 说明一个如果是OP_ACCEPT事件:如果是OP_ACCEPT事件,就调用:
SocketChannel clientChannel = ((ServerSocketChannel) key.channel()).accept()
获取SocketChannel对象,将其设置为非阻塞后,注册到Selector中。
3-3-2 从selectedkey中获取对应的channel和附加对象。
3-3-3 根据业务更改selectedkey的监听事件(key.interestOps(OP_READ | SelectionKey.OP_WRITE);)。
3-3-4 将已经处理过的key从selectedkeys集合中删除。
分享到:
相关推荐
Java进阶技术-netty进阶之路
《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...
Netty进阶之路 跟着案例学Netty 整本书无密码,Netty进阶之路 跟着案例学Netty
《Netty进阶之路:跟着案例学Netty》中的案例涵盖了Netty的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易让人犯错的地方。在案例的分析过程中,还穿插讲解了Netty...
2. **Netty的线程模型**:Netty采用Boss-Worker线程模型,主线程负责接收新的连接请求,工作线程负责处理已连接的客户端的读写操作。这种模型在处理大量并发连接时表现出色,避免了线程切换的开销。 3. **ByteBuf与...
《Netty权威指南第二版》源代码是一份珍贵的学习资源,由知名作者李林锋编写,专注于Java网络编程框架Netty的深入解析。这个压缩包包含的不仅是代码,更是理解和掌握Netty技术的关键。Netty是基于Java NIO(非阻塞I/...
精选自1000多个一线业务实际案例,从原理到实践全景式讲解Netty项目实践,快速领悟Netty专家花大量时间积累的经验,提高编程水平及分析解决问题的能力,《Netty木又威指南》作者力作,众专家力荐 Netty将Java NIO...
Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版...
Netty学习之ServerChannel Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本篇中,我们将深入探讨ServerChannel这一核心概念,它是Netty中用于接收客户端...
《Netty权威指南(第2 版)》是异步非阻塞通信领域的经典之作,基于最新版本的Netty 5.0 编写,是国内首本深入介绍Netty 原理和架构的书籍,也是作者多年实战经验的总结和浓缩。内容不仅包含Java NIO入门知识、Netty...
2. **ByteBuf**:Netty自定义的内存管理机制,比Java NIO的ByteBuffer更高效且易用。ByteBuf提供了动态扩容、读写索引管理以及零拷贝等功能,是Netty处理网络数据的核心。 3. **ChannelHandler**:Netty中的事件...
Netty (netty-netty-5.0.0.Alpha2.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...
根据提供的信息,《Netty权威指南(第二版)》是一本专注于Netty框架的书籍,旨在为读者提供深入理解和掌握Netty所需的知识与实践技巧。以下将根据标题、描述及部分标签内容来概述Netty框架的核心知识点。 ### ...
在《Netty进阶之路:跟着案例学Netty》中,作者将在过去几年实践中遇到的问题,以及Netty学习者咨询的相关问题,进行了归纳和总结,以问题案例做牵引,通过对案例进行剖析,讲解问题背后的原理,并结合Netty源码分析...
读书笔记:Netty权威指南学习之旅
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器...对于"Netty权威指南第二版官方源码"和"netty5源码"的探索,将有助于加深对这些概念的理解,并能根据实际情况灵活应用。
Netty 5.0.0.Alpha2 版本,包含:Jar包+源代码+API文档。 官网Netty 5.0版本已经废弃,所以发布出来,方便大家下载。 《Netty权威指南》一书使用的就是Netty 5.0
2. **EventLoop**:EventLoop是Netty的线程模型,负责处理I/O事件和调度任务。每个Channel都与一个或多个EventLoop关联。 3. **ByteBuf**:Netty的字节缓冲区,用于高效地处理网络数据。相比Java的ByteBuffer,...
下载地址:... netty-all-5.0.0.Alpha2.jar netty-all-5.0.0.Alpha2-sources.jar netty-all-5.0.0.Alpha2-javadoc.jar netty-example-5.0.0.Alpha2.jar netty-example-5.0.0.Alpha2-sources.jar 等
2. **Channel与EventLoop**:Netty中的Channel代表网络连接,EventLoop负责事件的调度和处理。源码分析可以帮助理解这两者之间的交互,以及如何优雅地处理并发和多线程问题。 3. **ByteBuf**:Netty的自定义缓冲区...