將時間添加到發射消息中。 假設歌曲是
{"time" : timeString, "songs" : songsList}
的對象。
如果我們考慮設備時間是正確的您可以計算信息所需的時間旅行,然後使用服務器計時器作爲主要計算器。
客戶端會得到時間倒計時應該開始:
var start = false;
var startTime = 0;
var myTime = new Date().getMilliseconds();
var delay = 1000 - myTime;
setTimeout(function(){
intervalID = setInterval(function(){
myTime = new Date().getTime();
//console.log(myTime); to check if there is round number of milliseconds
if (startTime <= myTime && start = true) {startCountdown();}
}, 100); //put 1000 to check every second if second is round
//or put 100 or 200 is second is not round
}, delay);
socket.on('data loaded', data){
startTime = data.time;
start = true;
}
function startCountdown(){
//your time countdown
}
而當2個客戶來自同一時域工作正常,因此,您將需要「時間轉換器」,檢查時間是不是好的原因如果您嚴格需要相同的號碼
後倒計時已經結束,您應該clearInterval(intervalID);
也許客戶端會發回一個令牌,表示他們在倒計時的位置,並且只有當它們具有相同的值時才發送消息來倒計時?不幸的是,如果你考慮到每個用戶的延遲,我認爲這可能是唯一的方法。 –
@SamJudge你能用代碼示例解釋更多嗎? – enucar
你需要多精確?用戶彼此距離有多遠?用戶和服務器之間的延遲是多少?使用上面的代碼,兩個用戶應該非常接近同步,但這取決於您的「同步」定義... – jcaron