2016-12-27 1 views
0

J'utilise la fonction Emit pour appeler un compte à rebours dans mon client (application anroid) qui ressemble à ceci.Socket.IO compte à rebours ne fonctionne pas correctement

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); 

Le problème est, pas toujours, ils commencent en même temps. Je veux dire quand le compte à rebours est terminé, il joue une chanson au hasard sur mon application. Mais parfoisl'un commence avant l'autre. J'ai entendu dire que cela dépend de leur temps de latence. Comment puis-je réparer cela? Ce serait utile si vous pouviez aussi envoyer un exemple de code.

Répondre

0

Vous pouvez obtenir un rappel (dans votre cas diminuer la variable compteur) lorsque le client a confirmé la réception du message. Pour cela, passez simplement une fonction comme dernier paramètre de .send ou .emit. Lorsque vous utilisez .emit, l'accusé de réception est effectué par vous, ce qui signifie que vous pouvez également transmettre des données:

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);