NIO-selector选择器(七)
初始化多路复用器:通过 注册通道:将需要监控的输入/输出通道(如套接字、文件描述符等)注册到 Selector 对象中。 设置非阻塞模式:将通道设置为非阻塞模式(通过 绑定和监听:将通道绑定到特定的地址(如 IP 地址和端口),并将其注册到多路复用器上,开始监听事件。 执行选择操作:调用 轮询事件:根据多路复用器返回的结果,轮询各个通道的事件类型(如连接事件、可读事件、可写事件等),并根据事件类型执行相应的业务逻辑。
发布日期:2021-04-30 21:03:38
浏览次数:91
分类:精选文章
本文共 1358 字,大约阅读时间需要 4 分钟。
Selector 是 Java NIO(非阻塞输入/输出)中用于管理多路复用器(Selector)的核心组件。它的主要作用是监控多路复用器上注册的多个通道(如文件描述符、套接字等)的事件状态,并根据事件类型执行相应的处理逻辑。
工作流程
在 Java NIO 中,Selector 的工作流程可以分为以下几个关键步骤:
Selector.open() 方法创建一个 Selector 对象,这个对象用于管理多个通道。serverSocketChannel.configBlocking(false)),以便多路复用器能够高效地处理大量事件。selector.select() 方法,使多路复用器变为阻塞状态,等待有事件要处理的通道。案例
服务端配置
创建多路复用器:
通过Selector.open() 创建一个 Selector 对象,用于管理多个通道。创建服务端套接字并设置非阻塞:
使用ServerSocketChannel 类创建服务端套接字,并通过 configBlocking(false) 将其设置为非阻塞模式。绑定端口并注册多路复用器:
将服务端套接字绑定到指定的 IP 地址和端口(如InetSocketAddress("localhost", 8080")),并将其注册到多路复用器上。设置阻塞并监听连接事件:
将多路复用器设置为阻塞状态,并在selector.select() 方法上执行。然后,通过轮询多路复用器中的事件键(key),判断事件类型: - 连接事件(ConnectionEvent):表示有新的客户端连接请求。
- 可读事件(ReadableEvent):表示客户端通过套接字发送了数据。
处理客户端事件:
遍历多路复用器中的事件键,并处理相应事件。例如:- 当检测到连接事件时,获取客户端的连接通道,并将其设置为非阻塞模式。
- 当检测到可读事件时,从客户端读取数据并进行处理。
- 需要注意的是,应从多路复用器中删除已处理的事件键,避免重复处理。
客户端配置
打开多路复用器:
使用Selector.open() 创建一个 Selector 对象。创建客户端并连接服务端:
使用SocketChannel.open() 创建客户端套接字,并指定连接目标地址(如 InetSocketAddress("localhost", 8080"))。注册连接事件:
将客户端套接字注册到多路复用器上,等待连接事件。轮询多路复用器事件:
在selector.select() 方法上执行,判断事件类型: - 连接事件(ConnectionEvent):表示服务端已接受客户端连接请求。
处理连接事件:
获取客户端的连接通道,并执行后续操作(如数据读写)。发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2026年05月25日 18时50分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP 插入排序 -- 折半查找
2023-02-28
PHP 支持8种基本的数据类型
2023-02-28
php 放大镜,放大镜放大图片效果
2023-02-28
PHP 数据库连接池实现
2023-02-28
php 数组 区别,PHP中数组的区别
2023-02-28
PHP 数组怎么添加一个元素
2023-02-28
PHP 文件操作
2023-02-28
php 文字弹幕效果代码,HTML5文字弹幕效果
2023-02-28
php 时间日期函数,获取今天开始时间,结束时间
2023-02-28
php 标准规范
2023-02-28
PHP 浮点型精度运算相关问题
2023-02-28
php 浮点型计算精度问题
2023-02-28
php 特定时间段统计,jpgraph某个时间段的数据统计
2023-02-28
php 生成csv mac下乱码
2023-02-28
php 生成证书 签名及验签
2023-02-28
PHP 的标准输入与输出
2023-02-28
php 笔记 (早前的,很乱)
2023-02-28
PHP 第一天
2023-02-28
Redis使用量暴增,快速定位有哪些大key在作怪
2023-02-28
PHP 统计数据功能 有感
2023-02-28