如何获得从客户端到服务器的单程旅行的延迟时间

wil*_*son 5 javascript node.js

我想知道是否有办法获得客户端向服务器发送消息和接收该消息的服务器之间的时间(以毫秒为单位)

我无法将服务器和客户端使用的时间(以毫秒为单位)进行比较,Date.now()因为每台设备可能会关闭几秒钟.

我可以找到双向旅行的时间,记录发送消息的时间,并在收到来自服务器的消息时再次记录时间.但是,消息从客户端到服务器所需的时间可能与消息在双向行程中从服务器到达客户端的时间不同.所以我不能简单地将这个时间除以2.

关于如何找到这个时间或至少Date.now()在客户端和服务器之间的区别的任何建议?

提前致谢.

mih*_*hai 1

如果您首先使用NTP同步服务器和客户端的时钟,则可以实现此目的。这需要访问外部服务器,但是您也可以将 NTP 配置为安装在您的服务器上(请参阅ntpd

Node中有几个实现NTP的模块:node-ntp-clientsntp

这是一个使用节点 ntp-client 的示例:

var ntpClient = require('ntp-client');

var clientOffset = 0;

ntpClient.getNetworkTime("pool.ntp.org", 123, function(err, date) {
    if(err) {
        console.error(err);
        return;
    }

    clientOffset = Date.now() - date;
});
Run Code Online (Sandbox Code Playgroud)

向服务器发送数据时,同时发送时间戳:

var clientTimestamp = Date.now() - clientOffset 
Run Code Online (Sandbox Code Playgroud)

服务器将有自己的偏移量。收到包时,它可以使用以下方法计算延迟:

var latency = Date.now() - serverOffset - clientTimestamp;
Run Code Online (Sandbox Code Playgroud)