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

2018-08-20 10:53:31 +08:00
 kingslanding

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

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

求各位大佬给个思路

2154 次点击
所在节点    问与答
6 条回复
liuyanjun0826
2018-08-20 11:49:02 +08:00
肯定是远程关的,远程代码无法保证质量,本地代码质量是不会有问题的
gamexg
2018-08-20 12:41:34 +08:00
没用过 nodejs,但是这个问题抓包可解。
kingslanding
2018-08-20 13:16:37 +08:00
@liuyanjun0826 远程代码 /本地代码都是人编的,质量的问题不会出在这个上轻。一个是客户端 nodejs,一个是服务端 swoole
kingslanding
2018-08-20 13:17:54 +08:00
@gamexg 一两个星期才出现一次,这个包抓得时间忒长了吧
NickCarter
2018-08-20 13:22:23 +08:00
我记得有个 close event 里面有个 clean 字段?
kingslanding
2018-08-20 14:07:36 +08:00
@NickCarter 有个 wasClean,指示是否 cleanly closed。但不能指示是哪一方开始的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481347

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX