2016-04-21 42 views
1

我寫的angularjs應用程序,並有一些問題。我的應用程序每次都使用套接字連接來獲取一些數據。出於這個原因我寫工廠(下面的代碼)。如何通過angularjs服務正確地重新連接到套接字?

var Service = {}; 
var ws = new WebSocket("url"); 
var timer; 

Service.onMessage = function(message) { /* some code */}; 
Service.onClose = function() { 
    timer = $interval(function() { 
      ws = new WebSocket("url"); 
      Service.connect(); 
    }, 1000); 
}; 
Service.onOpen = function() { 
    console.log("open"); 
    if (timer) $interval.cancel(timer); 
}; 
Service.onError = function(error) { /* some code */}; 

Service.connect = function() { 
     // (Re)connect 

     // Reattaching handlers to object 
     ws.onmessage = Service.onMessage; 
     ws.onclose = Service.onClose; 
     ws.onopen = Service.onOpen; 
     ws.onerror = Service.onError; 
} 
return Service; 

我有什麼問題?爲了簡單起見,想象一下我的服務器已關閉。套接字連接也關閉了。之後,onclose事件將開始。但我不明白如何重新連接套接字。例如,我應該每隔1或5秒檢查一次連接。在我的代碼中,如果套接字關閉,我創建新的套接字對象並嘗試重新連接。我有什麼?當服務器啓動時,我有許多連接到套接字的對象。請幫幫我。我如何解決這個問題,例如,有一個對象(一個當前連接)?

回答

0

但我不明白如何重新連接套接字。我應該檢查 連接每1秒或5秒

我覺得這不是一個純粹的角度相關的問題,在這裏一個普通的JavaScript答案(非測試):

function reconnect(url){ 
    ws = new WebSocket(url); 
    } 

    ws.onclose = function(){ 
    myTimeout = setTimeout(function(){reconnect('mywsURL')}, 5000); 
    }; 

在角使用:

var interval = $interval(your_callback, 5000); 

,並取消超時:

$interval.cancel(interval); 

我建議你閱讀這個lib的代碼,真的很有意思。

+0

感謝一個lib(工作正常:))!當然可能是我不寫你的代碼是正確的,而是一個對象,它也創建了許多對象。當套接字關閉時,重新連接函數創建新的套接字對象,在服務器關閉時無法連接。服務器啓動後,我可以看到,哈哈,不是魔術,而是數十個對象,它們帶着微笑連接到套接字。 但當然lib工作,我會閱讀(教)源圖書館,謝謝! –

相關問題