2016-04-21 2 views
1

Ich schreibe angularjs App und habe ein Problem. Meine App verwendet Socket-Verbindungen, um jedes Mal Daten zu erhalten. Aus diesem Grund schreibe ich Fabrik (Code unten).Wie korrekt Reccect in Socket über angularjs service?

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; 

Und welches Problem habe ich? Der Einfachheit halber stellen sich Lats vor, dass mein Server ausgefallen ist. Und Socket-Verbindung ist auch unten. Danach wird das Close-Event gestartet. Aber ich verstehe nicht, wie man mit Sockel wieder schließt. Ich sollte die Verbindung zum Beispiel alle 1 oder 5 Sekunden überprüfen. In meinem Code, wenn Socket geschlossen ist, ich ein neues Socket-Objekt erstellen und versuchen, eine neue Verbindung herzustellen. Und was habe ich? Wenn der Server hochgefahren ist, habe ich viele Objekte, die sich mit dem Socket verbinden. Bitte hilf mir. Wie kann ich das beheben, zum Beispiel, um ein Objekt (eine aktuelle Verbindung) zu haben?

Antwort

0

Aber ich verstehe nicht, wie man wieder mit Steckdose verbindet. Ich sollte Verbindung prüfen alle 1 oder 5 Sekunden

Ich denke, das nicht eine reine Winkel weitere Frage ist, hier eine allgemeine JavaScript Antwort (nicht getestet):

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

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

In Winkel Verwendung:

var interval = $interval(your_callback, 5000); 

und das Timeout abzubrechen:

$interval.cancel(interval); 

Ich empfehle Ihnen, den Code dieses lib, wirklich interessant zu lesen.

+0

Danke für eine Lib (funktioniert gut :))! Natürlich kann ich nicht Ihren Code korrekt schreiben, sondern ein Objekt, es erstellt auch viele Objekte. Wenn sich der Socket in der Nähe befindet, erstellen Sie die Funktion neu, um ein neues Socket-Objekt zu erstellen, das sich nicht verbinden kann, während der Server nicht aktiv ist. Nachdem der Server hochgefahren ist, kann ich sehen, aha, keine Magie, aber Dutzende von Objekten, die sich mit einem Lächeln mit dem Sockel verbinden. Aber natürlich lib Arbeit, und ich werde lesen (lehren) Quelle dieser Bibliothek, danke !!! –