2016-04-21 4 views
1

私はangularjsアプリを書いて、問題があります。私のアプリは毎回何らかのデータを取得するためにソケット接続を使用します。このため、私は工場(以下のコード)を書く。anglejsサービス経由でソケットにどのように正しく接続するのですか?

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秒ごとに接続を確認する必要があります。私のコードでは、ソケットが閉じている場合、私は新しいソケットオブジェクトを作成し、新たに接続しようとします。そして私は何を持っていますか?サーバーが起動しているとき、私はソケットに接続する多くのオブジェクトを持っています。私を助けてください。どのように私はこれを、たとえば、1つのオブジェクト(1つの現在の接続)を持つことができますか?

答えて

0

しかし、私はソケットに再接続する方法を理解していません。角度の使用では

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

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

:私はここで、私はこれが純粋な角度関連する質問はないと思う一般的なJavaScriptの答えを(非テスト) 接続ごとに1または5秒

をチェックする必要があります

var interval = $interval(your_callback, 5000); 

、タイムアウトキャンセルする:

$interval.cancel(interval); 

私はこのlibのコードを読むことをお勧めします、本当に面白いです。

+0

lib(ありがとう:)ありがとう!)!もちろん、私は正しいコードを書いてはいけないかもしれませんが、1つのオブジェクトでも、多くのオブジェクトを作成します。ソケットがクローズしているときに、再接続関数が作成され、サーバがダウンしている間に接続できない新しいソケットオブジェクトが作成されます。サーバーが立ち上がった後、私は魔法ではなく、笑顔でソケットに接続する数十のオブジェクトを見ることができます。 もちろん、libの仕事、そして私はこのライブラリのソースを読んで(教える)、ありがとう!!! –

関連する問題