当前位置: 首页 > 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.jsqmd.com/news/1096626/

相关文章:

  • ServerPackCreator终极指南:3分钟从零创建专业Minecraft服务器包
  • Python 数据处理加速:从 Pandas 瓶颈到流式计算的工程化进阶
  • 深入Prime Time系列 - 掌握STA - 01
  • 2026免费好用去水印软件推荐电脑手机在线无广告工具实测
  • ESP32音频开发实战:基于外部Codec构建MP3播放管道
  • Windows系统文件api-ms-win-core-libraryloader-l1-2-0.dll丢失找不到问题解决
  • 剖析:Java网络编程中SocketException: Software caused connection abort的根源与实战修复
  • PMP-PMBOK(第六版)--五大过程组与九大知识领域记忆口诀(第二辑)
  • FFmpeg 解码 H.264 视频花屏与马赛克:从网络传输到解码器的全链路排查与修复
  • 保姆级教程:从零手把手教你复现NewStarCTF那道PHP反序列化题(UnserializeOne)
  • 3D Gaussian Splatting(从零到一的实践指南)
  • 20美元打造超声波定向扬声器:DIY爱好者的完整制作指南
  • Zero Padding:不只是尺寸对齐,更是CNN的“边界守卫”
  • 自动匹配高被引权威文献:gradpaper 如何保障学术内容质量?
  • 私有 Markdown 笔记部署:Docker 一键部署 Memos 笔记
  • 网络即生命线:智能运维引领企业网络监控新纪元
  • 如何高效下载国家中小学智慧教育平台电子课本:终极免费工具指南
  • Bebas Neue字体完整教程:从零开始掌握这款免费开源标题字体的终极指南
  • 【Python】内存探秘:从变量到容器,用sys.getsizeof剖析内存占用真相
  • 分布式存储一致性实战:Raft 协议在百万级集群中的“反直觉“陷阱
  • 西平全案装修亲测:拎包入住细节复盘
  • STM32G4的FDCAN滤波器到底怎么配?手把手教你用HAL库搞定数据帧和广播帧过滤
  • 智慧校园数字化改造实战:智能锁身份核验+通断电联动,解决宿舍教室安全与运维痛点
  • 机器学习工程化:可复现实验流程的系统性设计方法
  • 如何在5分钟内用EfficientNet-PyTorch完成终极图像分类任务
  • 告别默认界面!新版MyDockFinder深度定制指南:从“资源管理器”到完美仿Mac
  • Windows系统文件api-ms-win-core-path-l1-1-0.dll丢失找不到问题解决
  • 【鸿蒙 PC三方库构建系统】解决 OpenHarmony SHA 库编译问题:从动态链接错误到静态链接优化
  • 独立站全流程运营自动化实战:Web 端 MCP 协议配置与 AI Agent 非侵入式架构选型指南
  • 从模拟到数字:音频接口的演进与选型指南