Peerjs: 切断後、peer.jsはどのようにして同じピアに再接続できますか?

作成日 2020年04月14日  ·  7コメント  ·  ソース: peers/peerjs

メッセージを受け取ったときに2つのピアが通話中に接続されているかどうかを知る必要があります-氷の接続状態が切断され、すべてのウィンドウが閉じられ、2つのピアが接続されます。 アイスサーバーが切断されたときに再接続するために処理できますか?

bug

最も参考になるコメント

iceconnectionが切断されたときに再接続する方法を知りたいですか? たくさんのコードを試しましたが、うまくいきません

このライブラリでは、接続がすぐに閉じられるため、切断状態を正常に回復することはできません。 できることは、 on('error')を聞いてから、元の接続をセットアップしたときとまったく同じ方法で接続することだけです。 かなり苦痛です。

注:エラーをチェックする場所は2つあります。 ピア自体と接続自体。 ちなみに、そうすべきではありませんが、現在のこのライブラリのように、それらはほとんどすべて致命的です。 ピア自体では、エラーの多くは致命的ですが、すべてではありません。

ピアのソケットエラーについては、次のようなものがあります。

this.peer.on('disconnected', () => {
        this.disconnectBackoff = 1;
        this.retrySocketConnection();
      });

ここで、backoffは秒単位の値であり、最大値に達するたびに増分します。

ピアエラーの場合、次のようなものがあります。

// Non-Fatal error:
// 'peer-unavailable' = maybe they left?
// 'disconnected' = this means the Peering server disconnected, we have a seperate retry for that on('disconnect')
// pretty much all of the rest are fatal.
const FATAL_ERRORS = ['invalid-id', 'invalid-key', 'network', 'ssl-unavailable', 'server-error', 'socket-error', 'socket-closed', 'unavailable-id', 'webrtc'];
this.peer.on('error', (e) => {
        if (FATAL_ERRORS.includes(e.type)) {
          this.reconnectTimeout(e); // this function waits then tries the entire connection over again
        } else {
          console.log('Non fatal error: ',  e.type);
        }
      });

そして、接続(私の場合はmediaConnection)のためにこれを持っています。

call.on('error', (e) => {
      console.warn('error with stream', e);
      if (initiator) { // initiator is a value I set myself
        // Optionally this should call only the user that failed instead of the whole thing
        this.reconnectTimeout();
      }
    });

そして、前述のreconnectTimeoutは、接続全体を再試行する単純な関数です。

理論的には、このライブラリはiceRestartsを処理でき、氷の切断で致命的となること

全てのコメント7件

切断された氷の状態は回復可能であるはずですが、現在、このライブラリは接続を途中で閉じます。 それが処理されるまで、あなたができる最善のことは、エラー時にタイマーを設定して再接続することです。

iceconnectionが切断されたときに再接続する方法を知りたいですか? たくさんのコードを試しましたが、うまくいきません

iceconnectionが切断されたときに再接続する方法を知りたいですか? たくさんのコードを試しましたが、うまくいきません

このライブラリでは、接続がすぐに閉じられるため、切断状態を正常に回復することはできません。 できることは、 on('error')を聞いてから、元の接続をセットアップしたときとまったく同じ方法で接続することだけです。 かなり苦痛です。

注:エラーをチェックする場所は2つあります。 ピア自体と接続自体。 ちなみに、そうすべきではありませんが、現在のこのライブラリのように、それらはほとんどすべて致命的です。 ピア自体では、エラーの多くは致命的ですが、すべてではありません。

ピアのソケットエラーについては、次のようなものがあります。

this.peer.on('disconnected', () => {
        this.disconnectBackoff = 1;
        this.retrySocketConnection();
      });

ここで、backoffは秒単位の値であり、最大値に達するたびに増分します。

ピアエラーの場合、次のようなものがあります。

// Non-Fatal error:
// 'peer-unavailable' = maybe they left?
// 'disconnected' = this means the Peering server disconnected, we have a seperate retry for that on('disconnect')
// pretty much all of the rest are fatal.
const FATAL_ERRORS = ['invalid-id', 'invalid-key', 'network', 'ssl-unavailable', 'server-error', 'socket-error', 'socket-closed', 'unavailable-id', 'webrtc'];
this.peer.on('error', (e) => {
        if (FATAL_ERRORS.includes(e.type)) {
          this.reconnectTimeout(e); // this function waits then tries the entire connection over again
        } else {
          console.log('Non fatal error: ',  e.type);
        }
      });

そして、接続(私の場合はmediaConnection)のためにこれを持っています。

call.on('error', (e) => {
      console.warn('error with stream', e);
      if (initiator) { // initiator is a value I set myself
        // Optionally this should call only the user that failed instead of the whole thing
        this.reconnectTimeout();
      }
    });

そして、前述のreconnectTimeoutは、接続全体を再試行する単純な関数です。

理論的には、このライブラリはiceRestartsを処理でき、氷の切断で致命的となること

サー私はプロジェクト全体にpeer.jsを使用していますここにpeerjsファイルのリンクがあります
https://github.com/peers/peerjs/blob/master/dist/peerjs.js

2つのピアがビデオ通話のために相互に接続したとき、一方のピアの接続が遅くなったときに問題が発生しているのは、iceconnectionが両方のピアを切断したときです。

これは、両方のピアを切断しているpeerjsファイルのコードです

`` `
peerConnection.oniceconnectionstatechange = function(){
スイッチ(peerConnection.iceConnectionState){
ケース「失敗」:
logger_1.default.log( "iceConnectionStateが失敗し、" + peerIdへの接続を閉じます);

      _this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Negotiation of connection to " + peerId + " failed."));

      _this.connection.close();

      break;

    case "closed":
      logger_1.default.log("iceConnectionState is closed, closing connections to " + peerId);

      _this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Connection to " + peerId + " closed."));

      _this.connection.close();

      break;

    case "disconnected":
      logger_1.default.log("iceConnectionState is disconnected, closing connections to " + peerId);

      _this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Connection to " + peerId + " disconnected."));

      _this.connection.close();

      break;

    case "completed":
      peerConnection.onicecandidate = util_1.util.noop;
      break;
  }

  _this.connection.emit(enums_1.ConnectionEventType.IceStateChanged, peerConnection.iceConnectionState);
}; // DATACONNECTION.

please check this code 

ケース「切断」:
logger_1.default.log( "iceConnectionStateが切断され、" + peerIdへの接続が閉じられます);

      _this.connection.emit(enums_1.ConnectionEventType.Error, new Error("Connection to " + peerId + " disconnected."));

      **_this.connection.close();**

`` `

ここで接続が近づき、ここで氷の接続を再接続したい

私の返事を読み直してください。 私はそれを私が知っている限り明確に説明しました。

このライブラリでは、接続がすぐに閉じられるため、切断状態を正常に回復することはできません。 できることは、on( 'error')をリッスンしてから、元の接続をセットアップしたときとまったく同じ方法で接続することだけです。 かなり苦痛です。

他の唯一のオプションは、フォークするか、ここで私のフォークを使用することです: https

他のオプションはありますか? または、ピアjsで私を助けてくれるなら、エラー時にどこにどのコードを書くべきですか?
私は本当に立ち往生しています。

@jrowny調査してくれてありがとう。 1.3.0で発送します

このページは役に立ちましたか?
0 / 5 - 0 評価