4.3 处理 accept 事件

简介: 4.3 处理 accept 事件

public class Client { public static void main(String[] args) { try (Socket socket = new Socket("localhost", 8080)) { System.out.println(socket); socket.getOutputStream().write("world".getBytes()); System.in.read(); } catch (IOException e) { e.printStackTrace(); } } }

服务器端代码为

@Slf4j public class ChannelDemo6 { public static void main(String[] args) { try (ServerSocketChannel channel = ServerSocketChannel.open()) { channel.bind(new InetSocketAddress(8080)); System.out.println(channel); Selector selector = Selector.open(); channel.configureBlocking(false); channel.register(selector, SelectionKey.OP_ACCEPT);


        while (true) {
            int count = selector.select();

//                int count = selector.selectNow(); log.debug("select count: {}", count); //                if(count <= 0) { //                    continue; //                }

            // 获取所有事件
            Set<SelectionKey> keys = selector.selectedKeys();
            // 遍历所有事件,逐一处理
            Iterator<SelectionKey> iter = keys.iterator();
            while (iter.hasNext()) {
                SelectionKey key = iter.next();
                // 判断事件类型
                if (key.isAcceptable()) {
                    ServerSocketChannel c = (ServerSocketChannel) key.channel();
                    // 必须处理
                    SocketChannel sc = c.accept();
                    log.debug("{}", sc);
                }
                // 处理完毕,必须将事件移除
                iter.remove();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

💡 事件发生后能否不处理

事件发生后,要么处理,要么取消(cancel),不能什么都不做,否则下次该事件仍会触发,这是因为 nio 底层使用的是水平触发

目录
相关文章
|
Arthas 监控 Java
开源Java诊断工具Arthas:开篇之watch实战
还在为排查Java程序线上问题头痛吗,看我们用阿里开源的诊断神器 Arthas 来帮您
914 1
|
存储
【机组期末速成】指令系统|机器指令概述|操作数类型与操作类型|寻址方式|指令格式
【机组期末速成】指令系统|机器指令概述|操作数类型与操作类型|寻址方式|指令格式
327 1
|
12月前
|
存储 缓存 监控
如何提高服务器CPU性能?
如何提高服务器CPU性能?
1143 3
|
Java 测试技术
一文读懂如何用Java编写单元测试用例?
一文读懂如何用Java编写单元测试用例?
1185 0
|
缓存 网络协议 安全
什么是防火墙?详解三种常见的防火墙及各自的优缺点
什么是防火墙?详解三种常见的防火墙及各自的优缺点
1365 2
|
Web App开发 缓存 运维
CentOS命令大全:从入门到精通
CentOS命令大全:从入门到精通
1601 1
|
编解码 并行计算 芯片
[工业相机] 分辨率、精度和公差之间的关系
[工业相机] 分辨率、精度和公差之间的关系
2772 1
|
存储 Linux 应用服务中间件
linux(二十九)查看磁盘挂载情况以及挂载和卸载磁盘
linux(二十九)查看磁盘挂载情况以及挂载和卸载磁盘
3179 1
|
机器学习/深度学习 存储 人工智能
深度学习经典网络解析图像分类篇(五):VGG
 VGGNet是在ImageNet Challenge 2014在定位和分类过程中分别获得了第一名和第二名的神经网络架构。VGGNet是牛津大学计算机视觉组和DeepMind公司的研究员一起研发的深度卷积神经网络。VGG主要探究了卷积神经网络的深度和其性能之间的关系,通过反复堆叠3×3的小卷积核和2×2的最大池化层,VGGNet成功的搭建了16-19层的深度卷积神经网络。
681 0
|
消息中间件 监控 JavaScript
聊聊 消息中心的设计与实现
聊聊 消息中心的设计与实现