websocket 里面 ping/pong 机制标准规定就是服务端发 ping ,客户端响应 pong 吗?
1
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 时(需要重试几次),可以考虑重新发起连接服务器了。 |
2
ellermister 2023-11-06 18:40:35 +08:00
JS 客户端没有 ping 的包,只能发个字符串,服务端都不用处理,连接就能维持。
内网环境啥都不发可以一直维持,公网环境,20s 发一次最保险,不然运营商就给你掐链接了。 |
3
dyllen OP @darkengine
@ellermister 好像是没有这个规定,我用的服务端 websocket 库实现是主动给客户端浏览器发 ping 的,浏览器会有 pong 的回应,浏览器端不需要自己处理 pong ,而且浏览器客户端也没有可以发 ping 帧的接口。 |
4
darkengine 2023-11-06 20:39:38 +08:00
原来是浏览器啊, 我们的是 app 端主动 ping, 因为移动网络很容易掉线, 所以需要有这个机制让 app 尝试重连.
|
5
rabbbit 2023-11-06 20:43:18 +08:00
一般都是 app 端主动发,随便发个啥都行,自己商量。
30s 发一次,服务器 2 分钟没收到主动断开。 |
6
lizhenda 2023-11-07 00:18:00 +08:00 via iPhone
没有标准,哪边发都可以。不过如果只是浏览器环境(特别是 Chrome)可以考虑服务端主动发 ping 因为浏览器会自动回 pong ,这时客户端就可以不用处理心跳了。否则,网页端需要自己模拟 ping 消息包。
|