Peerjs: Wie kann peer.js nach dem Trennen der Verbindung wieder mit demselben Peer verbunden werden?

Erstellt am 14. Apr. 2020  ·  7Kommentare  ·  Quelle: peers/peerjs

Ich muss wissen, ob 2 Peers auf Abruf verbunden sind, wenn wir eine Nachricht erhalten - der Eisverbindungsstatus wird getrennt, alle Fenster werden geschlossen und 2 Peers werden geschlossen. Können wir die Verbindung wiederherstellen, wenn die Verbindung zum Eisserver getrennt wird?

bug

Hilfreichster Kommentar

Ich möchte wissen, wie ich die Verbindung wieder herstellen kann, wenn die Eisverbindung getrennt wird. Ich habe so viele Codes ausprobiert, aber es funktioniert nicht

Mit dieser Bibliothek können Sie den getrennten Status nicht ordnungsgemäß wiederherstellen, da die Verbindung sofort geschlossen wird. Das einzige, was Sie tun können, ist, on('error') anzuhören und dann genau so eine Verbindung herzustellen, wie Sie es beim Einrichten Ihrer ursprünglichen Verbindung getan haben. Es ist ein ziemlicher Schmerz.

Hinweis: Es gibt zwei Stellen, an denen nach Fehlern gesucht werden kann. Auf Peer selbst und auf der Verbindung selbst. In Bezug auf die Verbindung sind sie so ziemlich alle tödlich, wie diese Bibliothek jetzt ist, obwohl sie es nicht sein sollten. Auf dem Peer selbst sind viele Fehler schwerwiegend, aber nicht alle.

Für Socket-Fehler auf Peer habe ich so etwas:

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

Dabei ist Backoff ein Wert in Sekunden, den ich jedes Mal erhöhe, wenn ich es auf ein Maximum versuche.

Für den Peer-Fehler habe ich so etwas:

// 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);
        }
      });

Und dann für die Verbindung (in meinem Fall mediaConnection) habe ich diese.

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();
      }
    });

Und das oben erwähnte reconnectTimeout ist eine einfache Funktion, die die gesamte Verbindung erneut versucht.

Theoretisch könnte diese Bibliothek mit iceRestarts umgehen und

Alle 7 Kommentare

Der getrennte Eiszustand sollte wiederherstellbar sein, aber derzeit schließt diese Bibliothek die Verbindung vorzeitig. Bis dies erledigt ist, ist das Beste, was Sie tun können, einen Timer auf Fehler zu setzen und die Verbindung wiederherzustellen.

Ich möchte wissen, wie ich die Verbindung wieder herstellen kann, wenn die Eisverbindung getrennt wird. Ich habe so viele Codes ausprobiert, aber es funktioniert nicht

Ich möchte wissen, wie ich die Verbindung wieder herstellen kann, wenn die Eisverbindung getrennt wird. Ich habe so viele Codes ausprobiert, aber es funktioniert nicht

Mit dieser Bibliothek können Sie den getrennten Status nicht ordnungsgemäß wiederherstellen, da die Verbindung sofort geschlossen wird. Das einzige, was Sie tun können, ist, on('error') anzuhören und dann genau so eine Verbindung herzustellen, wie Sie es beim Einrichten Ihrer ursprünglichen Verbindung getan haben. Es ist ein ziemlicher Schmerz.

Hinweis: Es gibt zwei Stellen, an denen nach Fehlern gesucht werden kann. Auf Peer selbst und auf der Verbindung selbst. In Bezug auf die Verbindung sind sie so ziemlich alle tödlich, wie diese Bibliothek jetzt ist, obwohl sie es nicht sein sollten. Auf dem Peer selbst sind viele Fehler schwerwiegend, aber nicht alle.

Für Socket-Fehler auf Peer habe ich so etwas:

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

Dabei ist Backoff ein Wert in Sekunden, den ich jedes Mal erhöhe, wenn ich es auf ein Maximum versuche.

Für den Peer-Fehler habe ich so etwas:

// 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);
        }
      });

Und dann für die Verbindung (in meinem Fall mediaConnection) habe ich diese.

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();
      }
    });

Und das oben erwähnte reconnectTimeout ist eine einfache Funktion, die die gesamte Verbindung erneut versucht.

Theoretisch könnte diese Bibliothek mit iceRestarts umgehen und

Sir, ich verwende Peer.js für das gesamte Projekt. Hier ist der Link für die PeerJS-Datei
https://github.com/peers/peerjs/blob/master/dist/peerjs.js

Jetzt was bekomme ich Problem, wenn 2 Peers für Videoanrufe miteinander verbunden sind, wenn ein Peer eine langsame Verbindung erhält Eisverbindung beide Peers trennen

und dies ist der Code in der PeerJS-Datei, in dem beide Peers getrennt werden

`` `
peerConnection.oniceconnectionstatechange = function () {
switch (peerConnection.iceConnectionState) {
Fall "fehlgeschlagen":
logger_1.default.log ("iceConnectionState ist fehlgeschlagen, Verbindungen zu" + peerId werden geschlossen);

      _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 

Fall "getrennt":
logger_1.default.log ("iceConnectionState wird getrennt, Verbindungen zu" + peerId werden geschlossen);

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

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

`` `

Hier wird die Verbindung eng und hier möchte ich die Eisverbindung wieder herstellen

Lesen Sie meine Antwort noch einmal. Ich habe es so klar erklärt, wie ich weiß.

Mit dieser Bibliothek können Sie den getrennten Status nicht ordnungsgemäß wiederherstellen, da die Verbindung sofort geschlossen wird. Das einzige, was Sie tun können, ist anzuhören ('Fehler') und dann genau so zu verbinden, wie Sie es beim Einrichten Ihrer ursprünglichen Verbindung getan haben. Es ist ein ziemlicher Schmerz.

Ihre einzige andere Möglichkeit ist, es zu gabeln oder meine Gabel hier zu verwenden: https://github.com/peers/peerjs/pull/655

irgendeine andere Option? oder wenn du mir in peer js helfen kannst wo und welchen code soll ich bei fehler schreiben?
Ich stecke wirklich fest, Sir ...

@jrowny danke für eine Untersuchung. Wir werden es in 1.3.0 versenden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen