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

第一章Netty,如何处理客户端断开连接的事件

基于前文对 NIO Selector 事件循环、OP_READ 读取逻辑及 key.cancel() 清理机制的深入讨论,处理客户端断开连接的核心在于‌准确感知断开信号‌并‌执行完整的资源清理‌,以防止内存泄漏和 CPU 空转。

一、断开信号的两种形式

‌正常断开‌:
调用 channel.read(buffer) 返回 ‌-1‌。这表示客户端已发送 FIN 包,连接正常关闭。
‌异常断开‌:
调用 read() 或 write() 时抛出 ‌IOException‌(如 Connection reset by peer)。这通常由客户端崩溃、网络中断或非正常关闭引起。

二、标准处理流程(清理三部曲)

无论何种断开,必须严格按顺序执行以下操作:

‌取消注册 (key.cancel())‌:
告诉 Selector 停止监控该通道。若省略此步,Selector 可能持续报告该键就绪,导致死循环和 CPU 100%。
‌关闭通道 (channel.close())‌:
释放底层 Socket 文件描述符。仅 cancel 不 close 会导致资源泄漏。
‌移除迭代项 (iterator.remove())‌:
从当前 selectedKeys 集合中移除,防止本次循环重复处理无效键。

三、代码实现示例

Iterator<SelectionKey>iterator=selector.selectedKeys().iterator();while(iterator.hasNext()){
http://www.jsqmd.com/news/1099914/

相关文章:

  • 最新量化验证,回测模拟实盘不是一件事
  • PHP+VUE医疗预约系统毕业设计:从环境搭建到核心业务实现全流程详解
  • 从Prompt到RAG:AI大模型应用开发全链路实战指南
  • 全星 APQP——QMS 一体化平台:打通 QMS,AI 赋能研发数智化建设——上海全星数智平台
  • Mac 党转 Linux 必看:用 keyd 复刻你最熟悉的快捷键习惯
  • Sa-Token:48,800+ Star 的背后让鉴权变得简单优雅
  • open harmony 项目实战:给语文学习 App 做一个高端精致的沉浸式界面
  • OpenCV VideoCapture 类
  • 无人机合速度和航捷转速度分量
  • 大数据志愿填报冲稳保如何搭配院校梯度
  • 龙芯3B6000服务器手动安装Docker 29.5.1实战指南
  • PHP+VUE医疗预约系统毕业设计:全栈开发实战与部署指南
  • MultiFunPlayer完整指南:设备同步与媒体播放的终极解决方案
  • 新店起店怎么查抖音小店对标数据?蝉妈妈拆解头部4要点
  • Element Plus 级联选择器实战:仿学科网教材多级选择的完整方案
  • Java计算机毕设之基于 SpringBoot+Vue 的 4S 店客户跟进与购车管理系统的设计与实现 基于 SpringBoot+Vue 的汽车门店车辆(完整前后端代码+说明文档+LW,调试定制等)
  • 专访大晓机器人王飞:世界模型是“进化型基础设施”
  • 基于51/STM32单片机温度控制系统 恒温箱 水温控制 温度采集 成品1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • HarmonyOS律愈实战02:ArkTS五音数据模型设计
  • esp32s3+ws2812灯条控制
  • 公开课紧张到忘词?老教师都在用的3个临场应对方法
  • LeetCode 热题 100 —— 7.接雨水(Javascript解法)
  • 别再盲目试用了!AI编程助手采购决策树:按团队规模、语言栈、安全等级自动匹配最优组合(含SaaS/私有化/混合部署ROI计算表)
  • 2026 年有哪些真正适合学生写开题的 AI 辅助写作工具,实测无套路分享
  • 【VMware磁盘扩容终极指南】:20年运维专家亲授5种零宕机扩容方案,99%的人不知道第3种!
  • Antigravity Manager:把多个 AI 账号管明白的桌面工具
  • Debian 12 编译安装网讯网卡驱动详细教程
  • Dism++深度解析:现代化Windows系统维护架构与技术实现
  • SCI投稿AI绘图避坑全攻略:AI打草稿+人工转矢量,彻底告别撤稿风险!
  • 从H100的异步执行和线程块集群,聊聊如何榨干GPU的每一分算力