V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FishBear
V2EX  ?  Node.js

讨论一下 net.socket 关闭问题

  •  
  •   FishBear · 25 天前 · 966 次点击

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    代码大概是这样的

    let s: Socket;
    
    //之前 查阅资料后发现不优雅 不发送 FIN 包
    s.destroy();
    
    //现在 使用 end 在销毁
    s.end(() => s.destroy());
    
    //现在这个 s 依旧没有立即销毁,还能收到数据,需要在等一会才会关闭
    

    有没有好的解决方案

    第 1 条附言  ·  24 天前
    destroySoon 解决了我的问题
    10 条回复  ?  2024-04-09 15:11:05 +08:00
    ysc3839
        1
    ysc3839  
       25 天前 via Android
    谁说 socket.destroy() 不会发送 FIN 的?我抓包看了会发。
    FishBear
        2
    FishBear  
    OP
       25 天前
    @ysc3839 那就是我不够严谨了 我在谷歌搜了别人的回答是这么说的..

    但是发了 destroy 之后 这个连接还开着 这就有点麻烦了
    FishBear
        3
    FishBear  
    OP
       25 天前
    @ysc3839 https://stackoverflow.com/questions/9191587/how-to-disconnect-from-tcp-socket-in-nodejs
    但调用时 socket.destroy ,客户端连接会在没有强行接收 FIN 包的情况下被破坏。最好的做法是 socket.destroy 尽可能避免致电。
    sujin190
        4
    sujin190  
       24 天前 via Android   ?? 1
    end 发送 fin 后,客户端暂时不给你回 fin2 而是继续发送数据,那你就是能继续收到数据的啊,就算客户端立刻关闭,那已发送的数据就应该继续收完了,本来你就需要等 close 事件,没啥问题啊,否则你直接 destory 就好了
    rrfeng
        5
    rrfeng  
       24 天前
    tcp 四次挥手没学好?
    ysc3839
        6
    ysc3839  
       24 天前 via Android   ?? 1
    @FishBear
    他说的也不是不发送 FIN ,而是不等对端发送 FIN 就关闭。
    他也没有给出避免使用 socket.destroy() 的理由。具体用不用当然要看用途,比如你的客户端收到了一大堆错误数据,那用 socket.destroy() 关闭并没什么问题,难不成还只能用 socket.end() 然后等半天对方发完错误数据?
    sohusi
        7
    sohusi  
       24 天前   ?? 1
    FishBear
        8
    FishBear  
    OP
       24 天前 via iPad
    @sohusi 我试试。还没发现这个 api
    FishBear
        9
    FishBear  
    OP
       24 天前
    @sohusi 我觉得你是对的 这个 api 非常有用 可以快速的关闭这个连接 并且提醒对方也关闭这个连接
    FishBear
        10
    FishBear  
    OP
       24 天前
    找到了一个更合适的 api .destroySoon()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2146 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:42 · PVG 18:42 · LAX 03:42 · JFK 06:42
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com