小问题。如何计算 WebSocket 连接的 ping 值? 服务器是使用 Node.js 和 node-websocket-server 设置的,如果这很重要的话。
最佳答案
方法不多。 Raynos 提供的一个 - 是错误的。因为客户端时间和服务器时间不同,不能比较。
发送时间戳的解决方案很好,但有一个问题。如果服务器逻辑根据 ping 进行一些决策和计算,然后发送时间戳,则存在客户端软件或 MITM 修改时间戳的风险,这样它将向服务器提供另一个结果。
更好的方法是将数据包发送到具有唯一 ID 的客户端,这不是增量数字,而是随机的。然后服务器将期待来自客户端的带有此 ID 的“PONG”消息。 ID 的大小应该相同,我推荐 32 位(整数)。 这样服务器发送具有唯一ID的“PING”并存储发送消息时的时间戳,然后等待直到它从客户端收到具有相同ID的响应“PONG”,并根据存储的时间戳和新的来计算往返延迟一个在收到 PONG 消息的那一刻。 不要忘记实现超时情况,以防止丢失 PING/PONG 数据包停止检查延迟的过程。
WebSockets 也有一个叫做 PING 的特殊数据包操作码,但是上面的例子没有使用这个特性。阅读描述此特定操作码的官方文档,如果您在服务器端实现自己的 WebSockets 协议(protocol),它可能会有所帮助:https://www.rfc-editor.org/rfc/rfc6455#page-37
关于node.js - 计算 WebSocket 连接的 Ping?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850412/