大量netty连接如何管理(一文搞定Netty断开连接原理)

 2025-06-30  阅读 289  评论 0

摘要:多路复用器(Selector) 接收到OP_READ事件:处理OP_READ事件: NIOSocketChannel.NioSocketChannelUnsafe.read()接受数据判断接受的数据大小是否

多路复用器(Selector) 接收到OP_READ事件:处理OP_READ事件: NIOSocketChannel.NioSocketChannelUnsafe.read()

  • 接受数据
  • 判断接受的数据大小是否<0,如果是,说明是关闭,开始执行关闭:
    • 关闭channel(包含cancel多路复用器的key)
    • 清理消息:不接受新信息,fail 掉所有queue中消息
    • 触发fireChannellnactive和fireChannelUnregistered。
源码

关闭连接,会触发OP_READ 事件:

  • 所以在此增加条件断点

大量netty连接如何管理(一文搞定Netty断开连接原理)(1)

  • 客户端断开连接时打断点

大量netty连接如何管理(一文搞定Netty断开连接原理)(2)

  • 写数据完成了读取字节数是**-1**代表正常关闭。

大量netty连接如何管理(一文搞定Netty断开连接原理)(3)

  • 释放缓存

大量netty连接如何管理(一文搞定Netty断开连接原理)(4)

到了最后,关闭 selection上的 selectionkey,这样selector 上就不会再发生该channel上的各种事件了。

关闭连接的根本 API(JDK 原生)
  • Channel的关闭包含了SelectionKey的cancel

大量netty连接如何管理(一文搞定Netty断开连接原理)(5)

如果发送数据的时候,突然把连接关闭掉了,这种不正常的取消连接如何执行的呢?

  • 数据读取进行时,强行关闭,会抛IOException

大量netty连接如何管理(一文搞定Netty断开连接原理)(6)

这里捕获

大量netty连接如何管理(一文搞定Netty断开连接原理)(7)

处理 IO 异常

大量netty连接如何管理(一文搞定Netty断开连接原理)(8)

所以正常关闭和异常关闭处理是不同的

大量netty连接如何管理(一文搞定Netty断开连接原理)(9)

原文链接:https://mp.weixin.qq.com/s/K8pQoDGIwMmtj6BnWV-fXg

,

版权声明:xxxxxxxxx;

原文链接:http://cn.tdroid.net/cecf3Cz0HBgEAVlc.html

发表评论:

管理员

  • 内容264889
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:
注册登录
注册帐号
登录帐号

Copyright © 2022 太卓开发网 Inc. 保留所有权利。 泰达科技网易库网

页面耗时0.1112秒, 内存占用1.33 MB, 访问数据库18次