首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Netty是如何断开连接的?

Netty是如何断开连接的?

作者头像
JavaEdge
发布2021-02-22 13:37:19
发布2021-02-22 13:37:19
2.6K0
举报
文章被收录于专栏:JavaEdgeJavaEdge

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

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

源码

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

  • 所以在此增加条件断点
  • 客户端断开连接时打断点
  • 写数据完成了 读取字节数是**-1**代表正常关闭。
  • 释放缓存

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

关闭连接的根本 API(JDK 原生)

  • Channel的关闭包含了SelectionKey的cancel

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

  • 数据读取进行时,强行关闭,会抛IOException
  • 这里捕获
  • 处理 IO 异常
  • 所以正常关闭和异常关闭处理是不同的
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 源码
  • 关闭连接的根本 API(JDK 原生)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档