我通过计算与主服务器的偏移量实现了一个简单的时间同步算法。处理代码本身存在一些滞后,这将加起来为时间戳。所以我想知道我将如何测试我的算法实际上是否在系统之间同步时间戳?
以下是我在 nodejs 中的时间同步逻辑
var onSync = function (data) {
var diff = Date.now() - data.t1 + ((Date.now() - data.t0)/2);
offsets.unshift(diff);
if (offsets.length > 10)
offsets.pop();
console.log("Order no ",data.ord,"The offset is ",offsets[0] ,"time in server was = ",data.t1 , "time in the slave = ", Date.now() );
};
系统使用 socket.io 进行通信。我在服务器中使用了一个全局变量,即全局变量,每次收到请求时都会更新,全局值作为 data.ord 发送到客户端。
所以目前,我有一个主服务器和多个从服务器,它们不断地汇集时间戳。以下是我得到的输出:
主节点:
rahul@g3ck0:~/programs/dos_homework/hw2$ nodejs ob1.js
Current server timestamp is 1395043602717 order no is 1
Current server timestamp is 1395043603263 order no is 2
Current server timestamp is 1395043603717 order no is 3
Current server timestamp is 1395043604264 order no is 4
Current server timestamp is 1395043604719 order no is 5
Current server timestamp is 1395043605265 order no is 6
Current server timestamp is 1395043605720 order no is 7
Current server timestamp is 1395043606267 order no is 8
从站 1:
rahul@g3ck0:~/programs/dos_homework/hw2$ nodejs slave1.js
Order no 1 The offset is 2.5 time in server was = 1395043602718 time in the slave = 1395043602719
Order no 3 The offset is 2 time in server was = 1395043603717 time in the slave = 1395043603718
Order no 5 The offset is 1.5 time in server was = 1395043604719 time in the slave = 1395043604720
Order no 7 The offset is 0 time in server was = 1395043605720 time in the slave = 1395043605720
奴隶 2:
rahul@g3ck0:~/programs/dos_homework/hw2$ nodejs slave2.js
Order no 2 The offset is 6 time in server was = 1395043603263 time in the slave = 1395043603268
Order no 4 The offset is 2.5 time in server was = 1395043604264 time in the slave = 1395043604265
Order no 6 The offset is 2 time in server was = 1395043605265 time in the slave = 1395043605266
Order no 8 The offset is 2 time in server was = 1395043606267 time in the slave = 1395043606268
如你看到的
偏移 + 时间戳(主)> 时间戳(从)
但这会在一段时间内不断下降。总之,我不确定这是否是正确的做法。我会喜欢你在 1 上的输入。如何实现更好的算法?2. 我将如何测试它?