Ale*_*der 6 connection ping websocket node.js
小问题.如何计算WebSocket连接的ping?服务器是使用Node.js和node-websocket-server设置的,如果这很重要的话.
几乎没有办法.Raynos提供的是错误的.因为客户端时间和服务器时间不同,所以无法比较它们.
发送时间戳的解决方案很好,但它有一个问题.如果服务器逻辑基于ping做了一些决策和计算,那么发送时间戳会给客户端软件或MITM修改时间戳的风险,这样会给服务器带来另一个结果.
更好的方法是将数据包发送到具有唯一ID的客户端,这不是增量编号,而是随机的.然后服务器将使用此ID从客户端"PONG"消息中获取.ID的大小应该相同,我建议32bits(int).这样,服务器发送具有唯一ID的"PING"并存储发送的时刻消息的时间戳,然后等待它将从客户端接收具有相同ID的响应"PONG",并将根据存储的时间戳和新计算往返的延迟一个接收PONG消息的那一刻.不要忘记用超时来实现案例,以防止丢失PING/PONG数据包停止检查延迟的过程.
同样,WebSockets有一个名为PING的特殊数据包操作码,但上面的帖子中的示例并未使用此功能.阅读这篇描述此特定操作码的官方文档,如果您在服务器端实现自己的WebSockets协议可能会有所帮助:http://tools.ietf.org/html/rfc6455#page-37
要计算延迟,您应该完成往返.您应该有一条ping消息,其中包含时间戳.当一方或另一方收到ping时,应将其更改为pong(或gnip或其他),但保留原始时间戳并将其发送回发件人.然后,原始发件人可以将时间戳与当前时间进行比较,以查看往返延迟是什么.如果你需要单向延迟除以2.你需要这样做的原因是没有一些非常复杂的时间偏移算法,一个主机与另一个主机上的时间在这样的小时间增量上是不可比的.
归档时间: |
|
查看次数: |
7260 次 |
最近记录: |