2016-05-05 21 views
0

私は最近PeerJSを使用してWebアプリケーションを開発し、再接続機能を追加しようとしています。PeerJS自動再接続

基本的に、私のアプリはクライアントが、その後に接続することサーバーを作成する誰かによって動作します。サーバーの担当者は、ホストが何をしているかを制御できますが、基本的な双方向通信を制御できます。

クライアントが切断すると、再接続するだけで正常に動作します。しかし、サーバーのユーザーがページをリフレッシュするか、コンピューターがクラッシュした場合、クライアントの制御を再確立できる必要があります。

これは、元の接続IDとピアAPI IDを元に戻すことです。これは、データベースに格納され、サーバーユーザーがクエリに使用できる一意のIDが割り当てられているため、きれいで簡単です。その後、私は近い時にこれを行う再接続するクライアントを有効にする:彼らは再接続されているように、これは動作しているように見えます

// connection is closed by the host involuntarily... 
conn.on('close', function() { 

    // if the clients connection closes set up a reconnect request loop - when the host takes back control 
    // the client will auto reconnect... 

    connected = false; 
    conn = null; 

    var reconnect_timer = setInterval(function() { 

     console.log('reconnecting...'); // make a fancy animation here... 
     conn = peer.connect(connectionid, {metadata: JSON.stringify({'type':'hello','username':username})});  

     // upon connection 
     conn.on('open', function() { // if this fails need to provide an error message... DO THIS SOON  
      // run the connect function... 
      connected = true; 
      connect(conn);  
     }); 

     // didnt connect yet 
     conn.on('error', function(err) { 
      connected = false; 
     }); 

     if(connected === true) { 
      clearInterval(reconnect_timer); 
     } 

    }, 1000); 

}); 

サーバー上で、クライアントを終了することになります - メッセージが送信されカントしかしコネクト機能等を解雇しました間、およびクライアントコンソールは言う:「オープン」イベントは、上記に耳を傾けていたように示されている

Error: Connection is not open. You should listen for the `open` event before sending messages.(…) 

...

私は、これは明らかであると思います - 任意のヘルプは高く評価され:)

答えて

0

だから最後に自動再接続スクリプトを作成するには、私は単純にサーバが同じ(cloudservers用)API_KEYとキーに設定した確保、物事のクライアント側で対処:

peer = new Peer(return_array.host_id, {key: return_array.api_key}); 

、その後持ちますクライアント:接続時に閉じる:

// connection is closed by the host involuntarily... 
conn.on('close', function() { 
    // if the clients connection closes set up a reconnect request loop - when the host takes back control 
    // the client will auto reconnect... 

    peer.destroy();  // destroy the link 
    connected = false; // set the connected flag to false 
    conn = null;  // destroy the conn 
    peer = null;  // destroy the peer 

    // set a variable which means function calls to launchPeer will not overlap 
    var run_next = true; 

    // periodically attempt to reconnect 
    reconnect_timer = setInterval(function() { 
     if(connected===false && run_next===true) { 
      run_next = false; // stop this bit rerunning before launchPeer has finished... 
      if(launchPeer(false)===true) { 
       clearInterval(reconnect_timer); 
      } else run_next == true; 
     }  
    }, 1000); 

}); 

ここで、launchピアは新しいピアを起動しようとします。連続性を保証するために、クライアントからの新しいIDがクライアントからの古いIDを置き換え、すべてが円滑なテイクオーバーです。最終的に最も難しい部分は、ブーリアンフラグを使用して(悪いことに)達成された「setInterval」を1回だけ発生させることでした。

彼らがどのように助けてくれるかを読んだり考えてくれた人に感謝します。

関連する問題