• 30、Nio(select(处理用户端断开(有read事件)))


    Nio(select(处理用户端断开(有read事件)))

    首先我们要有个理解:我们的客户端不管是强制停止,还是正常断开都会触发一个read事件(只是正常断开的read返回的值是-1)

    第一步:我们强制停止客户端

     

    服务器出现异常(因为我们的客户端已经强制关闭了,我们的客户端想要再去read就会出现io异常)

     

    第二步:处理方式(我们先给他try catch捕获一下异常)ctrl+alt+T快捷键

     

     

    此时服务器端一直运行,只是服务器没有停止了

     

    因为我们捕获异常后,这个异常还会进入外层的循环,客户端强制停止后还会触发一个read事件(进入我们集合),但是这个key我们并没有进行处理。没有处理那么这个select这个方法就不会阻塞住(一直运行)

    第三步:再次优化(我们去将这个key从集合里里面删除)

     

    这里没有问题了,我们的这里是打印了一下异常(e.printS...)

     

    第四步:还有个问题,客户端正常断开(服务器端又停不下了),因为我们正常断开也会产生一个read事件,且不会被异常捕获咯,那么这个正常key就不会被删除咯

     

    优化:我们区分正常断开和异常断开,思路我们正常断开read返回的是-1这样来判断

     

     

  • 相关阅读:
    canvas 简单直线轨迹运动与线性插值计算
    npm离线安装全局模块包
    仿真1 - takeoff_land
    WordPress批量修改数据库内文章内容文字关键字标题
    动态规划一
    08.webpack5搭建vue环境(二)
    北京化工大学数据结构2022/11/3作业 题解
    IDEA集成Git
    MySQL数据库(基础)
    美食杰项目 -- 首页(一)
  • 原文地址:https://blog.csdn.net/logtcm4/article/details/127820967