node.js - 计算 WebSocket 连接的 Ping?

标签 node.js connection websocket ping

小问题。如何计算 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/

相关文章:

客户端创建到未知服务器 IP 的连接

ajax - WebSockets 协议(protocol)与 HTTP

java - 如何删除 Atmosphere 广播

javascript - 错误: opencv4nodejs linux for missing module

javascript - 在 MongoDB 和 Mongoose 中将 JSON 文档替换为另一个,而无需事先了解 JSON 文档的属性

javascript - Node.js 中的语法错误 : Unexpected end of input at Module. _compile

node.js - 如何解决node-sass安装脚本错误

java - 客户端未连接到服务器

android - 如何将设备上运行的 android 应用程序连接到本地 Web 应用程序?

mysql - NodeJS + MySQL + Socket.IO : Update database