2016-12-27 155 views
0

我使用emit函數在我的客戶端(anroid應用程序)中調用倒計時,看起來像這樣。Socket.IO倒計時不能正常工作

var countdown = 3; 
var countdownInterval = setInterval(function() { 
    socket.emit('countdown', countdown); // to player 
    socket.broadcast.to(opponent).emit('countdown', countdown); // to opponent 

    if (countdown == 0) { 
     clearInterval(countdownInterval); 
    } 

    countdown--; 

}, 1000); 

問題是,並不總是在同一時間開始。我的意思是當倒計時完成時,它會在我的應用程序中播放隨機歌曲。但有時一開始之前另一個

我聽說它取決於它們的延遲。我怎樣才能解決這個問題?如果您也可以發送示例代碼,這將會很有用。

回答

0

當客戶端確認消息接收時,您可能想要獲得回調(在您的情況下減少計數器變量)。

要做到這一點,只需傳遞一個函數作爲.send.emit的最後一個參數。當您使用.emit時,確認由您完成,這意味着您也可以將數據傳遞給:

var countdown = 3; 
var countdownInterval = setInterval(function() { 
    socket.emit('countdown', countdown, function(){ 
     if (countdown == 0) clearInterval(countdownInterval); 
     countdown--; 
     socket.broadcast.to(opponent).emit('countdown', countdown); // to opponent 
    }); // to player 


}, 1000);