kingslanding
V2EX  ›  问与答

一个 socket 被 close 掉了,如何知道是远端 close 的还是本地 close 的?

  •  
  •   kingslanding · Aug 20, 2018 · 3139 views
    This topic created in 3009 days ago, the information mentioned may be changed or developed.

    最近一直被这个问题困扰, 在 nodejs 中用 websocket,onclose 时 close event 的 code 的是 1000 (正常关闭),但无法查清是本地客户端主动断开的,还是远程服务端断开的。 远程服务端的程序员说他没有关闭, 我这儿也查了,连接后,就一直由心跳包保持,close()函数调都没调。所以就懵了

    我想,既然是正常关闭,总有一个 TCP 的 FIN 握手过程,但如何知道是哪一端发起的呢?

    求各位大佬给个思路

    6 replies  •  2018-08-20 14:07:36 +08:00
    liuyanjun0826
    liuyanjun0826
    Aug 20, 2018 via Android
    1
    肯定是远程关的,远程代码无法保证质量,本地代码质量是不会有问题的
    gamexg
    gamexg
    Aug 20, 2018
    2
    没用过 nodejs,但是这个问题抓包可解。
    kingslanding
    kingslanding
    OP
    Aug 20, 2018
    3
    @liuyanjun0826 远程代码 /本地代码都是人编的,质量的问题不会出在这个上轻。一个是客户端 nodejs,一个是服务端 swoole
    kingslanding
    kingslanding
    OP
    Aug 20, 2018
    4
    @gamexg 一两个星期才出现一次,这个包抓得时间忒长了吧
    NickCarter
    NickCarter
    Aug 20, 2018 via iPhone
    5
    我记得有个 close event 里面有个 clean 字段?
    kingslanding
    kingslanding
    OP
    Aug 20, 2018
    6
    @NickCarter 有个 wasClean,指示是否 cleanly closed。但不能指示是哪一方开始的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1078 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:53 · PVG 01:53 · LAX 09:53 · JFK 12:53
    ♥ Do have faith in what you're doing.