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

2023-11-06 17:20:13 +08:00
 dyllen

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

1391 次点击
所在节点   WebSocket
6 条回复
darkengine
2023-11-06 17:44:30 +08:00
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
2023-11-06 18:40:35 +08:00
JS 客户端没有 ping 的包,只能发个字符串,服务端都不用处理,连接就能维持。

内网环境啥都不发可以一直维持,公网环境,20s 发一次最保险,不然运营商就给你掐链接了。
dyllen
2023-11-06 19:08:18 +08:00
@darkengine
@ellermister 好像是没有这个规定,我用的服务端 websocket 库实现是主动给客户端浏览器发 ping 的,浏览器会有 pong 的回应,浏览器端不需要自己处理 pong ,而且浏览器客户端也没有可以发 ping 帧的接口。
darkengine
2023-11-06 20:39:38 +08:00
原来是浏览器啊, 我们的是 app 端主动 ping, 因为移动网络很容易掉线, 所以需要有这个机制让 app 尝试重连.
rabbbit
2023-11-06 20:43:18 +08:00
一般都是 app 端主动发,随便发个啥都行,自己商量。
30s 发一次,服务器 2 分钟没收到主动断开。
lizhenda
2023-11-07 00:18:00 +08:00
没有标准,哪边发都可以。不过如果只是浏览器环境(特别是 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