2016-12-27 100 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);