2012-06-19 148 views
4

我使用node.js和socket.io來構建遊戲。Socket.io:如何在斷開連接後重新連接時執行某些操作?

我的代碼如下。遊戲很簡單。一旦連接到服務器並開始動畫,它就開始做一些動畫。

我想確保如果互聯網連接斷開或者服務器斷開連接,遊戲將會優雅地失敗。一旦連接恢復,遊戲就會恢復。

animate函數從服務器獲取內容。因此,如果沒有連接,它將無法正常工作。我希望動畫函數只有在有連接時才能執行。

所以我介紹了一個名爲connected的變量,它應該保持連接的狀態。如果conncted = false,我停止動畫。

但現在問題是socket.io本身嘗試重新連接幾次。在重新連接過程中,如何將連接設置爲false?

Game.js

var connected = false; 

$(document).ready(function(){ 

//connect to socket server 



socket = io.connect('/gameserver'); 



socket.on('connect', function() { 
    connected = true; 
    animate(); 


}); 

socket.on('disconnect', function() { 
    connected = false; 
socket.connect(); 

}); 



}); 


function animate() 

{ 

.... 
...... 
........ 

if ((connected) && (.....)) animate(); 




} 

回答

2

您可以使用下面的內置功能,要知道連接的狀態,並相應地定義動畫的狀態:

socket.on('disconnect', function(){}); // wait for reconnect, hold animation 
socket.on('reconnect', function(){}); // connection restored, restart animation 
socket.on('reconnecting', function(nextRetry){}); //trying to reconnect, hold animation 
socket.on('reconnect_failed', function(){ message("Reconnect Failed"); });// end animation 

nextRetry指定前的時間它會嘗試連接,如果這有助於用戶更新狀態。

此外,在與服務器斷開連接時,不需要調用socket.connect()。更新後的狀態將從socket.on('reconnect')提供。所以在這裏只包含對動畫的調用。

只有從客戶端調用socket.disconnect時,連接纔會自動恢復,因此必須再次調用socket.connect()。

相關問題