websocket 的 ping/pong 标准是需要服务器主动发 ping?

188 天前
 dyllen

websocket 里面 ping/pong 机制标准规定就是服务端发 ping ,客户端响应 pong 吗?

775 次点击
所在节点   WebSocket
6 条回复
darkengine
188 天前
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#pings_and_pongs_the_heartbeat_of_websockets

没有这么个规定。我觉得 client 端发也是合理的,当给服务器发 ping 没收到 pong 时(需要重试几次),可以考虑重新发起连接服务器了。
ellermister
188 天前
JS 客户端没有 ping 的包,只能发个字符串,服务端都不用处理,连接就能维持。

内网环境啥都不发可以一直维持,公网环境,20s 发一次最保险,不然运营商就给你掐链接了。
dyllen
188 天前
@darkengine
@ellermister 好像是没有这个规定,我用的服务端 websocket 库实现是主动给客户端浏览器发 ping 的,浏览器会有 pong 的回应,浏览器端不需要自己处理 pong ,而且浏览器客户端也没有可以发 ping 帧的接口。
darkengine
188 天前
原来是浏览器啊, 我们的是 app 端主动 ping, 因为移动网络很容易掉线, 所以需要有这个机制让 app 尝试重连.
rabbbit
188 天前
一般都是 app 端主动发,随便发个啥都行,自己商量。
30s 发一次,服务器 2 分钟没收到主动断开。
lizhenda
188 天前
没有标准,哪边发都可以。不过如果只是浏览器环境(特别是 Chrome)可以考虑服务端主动发 ping 因为浏览器会自动回 pong ,这时客户端就可以不用处理心跳了。否则,网页端需要自己模拟 ping 消息包。

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

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

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

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

© 2021 V2EX