当前位置: 首页 > news >正文

第一章Netty,NIO Selector的读事件处理详解

基于前文对 NIO Selector 事件循环、OP_ACCEPT 接入流程及 key.cancel() 清理机制的讨论,‌读事件(OP_READ)处理‌是 NIO 服务端接收客户端数据的核心环节。其核心难点在于‌TCP 流式特性导致的粘包/拆包‌以及‌非阻塞 IO 的状态判断‌。

一、核心处理逻辑

当 key.isReadable() 为真时,执行以下步骤:

‌获取通道与缓冲区‌:从 SelectionKey 获取 SocketChannel 及关联的 ByteBuffer(建议使用附件 Attachment 复用缓冲区)。
‌非阻塞读取‌:调用 channel.read(buffer)。
‌返回值 > 0‌:读取到字节数,需处理数据。
‌返回值 == 0‌:当前无数据,正常现象,跳过。
‌返回值 == -1‌:客户端正常关闭连接,需清理资源。
‌异常捕获‌:若读取过程抛出 IOException(如连接重置),需立即取消键并关闭通道。

二、完整代码示例(含粘包处理雏形)

if(key.isReadable()){SocketChannelclient=(SocketChannel)key.channel();// 使用附件中的缓冲区,避免每次分配内存,同时保留未读完的数据ByteBufferbuffer=(ByteBuffer)key.attachment();try{intbytesRead=client.
http://www.gsyq.cn/news/1608591.html

相关文章:

  • FFmpeg 解码 H.264 视频花屏与马赛克:从网络传输到解码器的全链路排查与修复
  • 20美元打造超声波定向扬声器:DIY爱好者的完整制作指南
  • 如何高效下载国家中小学智慧教育平台电子课本:终极免费工具指南
  • Bebas Neue字体完整教程:从零开始掌握这款免费开源标题字体的终极指南
  • 【Python】内存探秘:从变量到容器,用sys.getsizeof剖析内存占用真相
  • STM32G4的FDCAN滤波器到底怎么配?手把手教你用HAL库搞定数据帧和广播帧过滤
  • 如何在5分钟内用EfficientNet-PyTorch完成终极图像分类任务
  • Windows系统文件api-ms-win-core-path-l1-1-0.dll丢失找不到问题解决
  • 深入解析fullPage.js:从模块化架构设计到企业级全屏滚动解决方案
  • 手把手教你复现Juniper SRX的CVE-2023-36845漏洞(附EXP与FOFA语法)
  • 系统调用与字符设备驱动:从内核态切换到硬件交互的全链路实战
  • 基于Unity 3D + C#实现的宗祠文化主题重阳节虚拟展馆交互漫游系统
  • PKHeX自动化合法性插件深度解析:技术原理与实战应用指南
  • MySQL 全环境生产快速安装 + 完整配置手册(汇总精简版,便于学习查阅)
  • 别再让GPU闲着!用CUDA Streams实现数据传输与核函数执行的重叠(附代码示例)
  • 开关磁阻电机:从双凸极结构到智能控制,解锁高效驱动新范式
  • 2026白银黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • 终极批量水印工具:摄影师的高效照片水印处理解决方案
  • 未来健康商城:B2C+O2O模式解析
  • Advanced XRay模组:Minecraft高效挖矿的终极解决方案
  • Windows 电脑重复文件怎么清理 按风险等级排序处理大文件占用
  • 【安信可实战解析】ESP32S3 USB主机功能驱动MJPEG摄像头,构建低功耗Wi-Fi图传系统
  • 从零到一:3DMax自定义弯曲工具TycoonBuilder实战指南与创意应用
  • 资产侦察利器-dismap:从指纹识别到风险定位实战
  • 家里佳能G3800打印机突然报错5b00,之后找维修店维修,报价180,我觉得太贵没有修,之后经过朋友介绍这个佳能V6.200原版佳能清零软件完美修好了,哈哈,直接省了180元,亲测完美哈。
  • 基于OpenCVE构建企业级漏洞监控体系:从原理到实战部署
  • 拆解一个不用电池的门铃按钮,看看它怎么靠按一下就能发电发信号
  • JavaScriptProxy 和 runJavaScript:ASCF 里两根最重要的桥
  • OpenCore配置管理技术革命:OCAT图形化工具深度解析与实践指南
  • 告别官方IDE:在VS 2022中构建高效Arduino开发与调试工作流