小问题。我如何计算WebSocket连接的ping? 服务器使用Node.js和node-websocket-server进行设置,如果这很重要的话。计算WebSocket连接的Ping?
回答
要计算你真的应该完成往返的延迟。你应该有一个有时间戳的ping消息。当一方或另一方接收到ping时,应将其更改为pong(或gnip或其他),但保留原始时间戳并将其发送回发件人。然后,原始发件人可以将时间戳与当前时间进行比较,以查看往返延迟是多少。如果你需要将单向延迟除以2.这样做的理由是,如果没有一些非常复杂的时间偏移算法,一台主机相对于另一台主机的时间在这样的小时间偏差下是不可比的。
您可以发送请求通过网络套接字Date.now()
作为数据,并将其与Date.now()
在服务器上进行比较。
这会给你发送数据包和接收数据包加上任何处理时间的时间差。
Websockets有一个ping类型的消息,服务器可以用pong类型的消息来响应。有关websockets的更多信息,请参阅this。
有几种方法。 Raynos提供的是错误的。由于客户端时间和服务器时间不同,并且您无法比较它们。
发送时间戳的解决方案很好,但它有一个问题。如果服务器逻辑基于ping做出一些决定和计算,那么发送时间戳会给客户端软件或MITM修改时间戳带来风险,这样会给服务器带来另一个结果。
更好的方法是将数据包发送到具有唯一ID的客户端,即不是增量编号,而是随机化的。然后服务器会用这个ID从客户端预期“PONG”消息。 ID的大小应该相同,我推荐32位(int)。 这样服务器发送带有唯一ID的“PING”并存储发送时刻消息的时间戳,然后等待,直到它将从客户端接收到具有相同ID的响应“PONG”,并且将基于存储的时间戳计算往返延迟并且在收到PONG消息的那一刻。 不要忘记执行超时的情况下,以防止丢失的PING/PONG包停止检查延迟的过程。
以及WebSockets有特殊的数据包操作码称为PING,但来自上面的帖子的例子是不使用此功能。阅读这个描述这个特定操作码的官方文档,如果你在服务器端实现你自己的WebSocket协议可能会有所帮助:http://tools.ietf.org/html/rfc6455#page-37
为什么downvote,对此有何评论? – moka 2012-04-20 11:47:25
- 1. 我需要'ping'连接的websocket连接吗?
- 2. 谷歌计算引擎实例上的Websocket连接失败
- 3. 龙卷风websocket ping
- 4. websocket未连接
- 5. WebSocket连接。 Android
- 6. WebSocket连接
- 7. WebSocket连接AWS
- 8. Heroku的WebSocket连接
- 9. Mysql连接计算
- 10. 带节点js的websocket ping
- 11. 计算ping时间android
- 12. WebSocket连接超时
- 13. Websocket连接设置
- 14. Firefox Websocket双连接
- 15. WebSocket连接和Tritium
- 16. Pusherapp/Websocket未连接
- 17. 多个websocket连接
- 18. 建立与WebSocket的连接
- 19. 与mysql的websocket连接
- 20. 与邮差的Websocket连接
- 21. 计算左连接结果?
- 22. 用左连接计算行
- 23. 在连接中计算列
- 24. nodejs-websocket检测非websocket连接尝试
- 25. 无法通过websocket连接连接
- 26. 在Linux中运行时计算发送和接收的PING包
- 27. 计算机器正在接收的ping数
- 28. 跨域WebSocket连接[Spring Boot]
- 29. 从Meteor.js打开Websocket连接
- 30. 如何检查websocket连接?
什么是“计算ping”应该是什么意思? – 2011-05-01 18:31:41
计算连接的延迟时间。 – Alexander 2011-05-01 18:46:15