Peerjs: Comment peer.js peut-il se reconnecter au même pair après la déconnexion?

Créé le 14 avr. 2020  ·  7Commentaires  ·  Source: peers/peerjs

J'ai besoin de savoir si 2 pairs sont connectés sur appel lorsque nous recevons un message - l'état de connexion de la glace est déconnecté, il ferme toutes les fenêtres et déconnecte 2 pairs. Pouvons-nous gérer la reconnexion lorsque le serveur ice se déconnecte?

bug

Commentaire le plus utile

Je veux savoir comment puis-je me reconnecter lorsque la connexion à la glace est déconnectée? J'ai essayé tellement de code mais cela ne fonctionne pas

Cette bibliothèque ne vous permettra pas d'effectuer une récupération progressive de l'état déconnecté car elle ferme immédiatement la connexion. La seule chose que vous pouvez faire est d'écouter on('error') , puis de vous connecter exactement de la même manière que vous l'avez fait lorsque vous avez configuré votre connexion d'origine. C'est assez pénible.

remarque: il y a deux endroits pour vérifier les erreurs. Sur le pair lui-même et sur la connexion elle-même. En ce qui concerne la connexion, ils sont à peu près tous fatals comme cette bibliothèque est maintenant, bien qu'ils ne devraient pas l'être. Sur le pair lui-même, de nombreuses erreurs sont fatales, mais pas toutes.

Pour les erreurs de socket sur le pair, j'ai quelque chose comme ceci:

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

où backoff est une valeur en secondes que j'incrémente à chaque fois que j'essaye jusqu'à un maximum.

Pour l'erreur de pair, j'ai quelque chose comme ceci:

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

Et puis pour la connexion (mediaConnection dans mon cas) j'ai ceci.

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

Et le reconnectTimeout mentionné ci-dessus est une fonction simple qui essaie à nouveau toute la connexion.

En théorie, cette bibliothèque pourrait gérer iceRestarts et ne pas être fatale en cas de déconnexion de la glace, ce qui, je pense, résoudrait la majorité des problèmes. J'ai un PR pour la déconnexion, mais pas encore pour les redémarrages.

Tous les 7 commentaires

l'état de glace déconnecté devrait être récupérable, mais actuellement, cette bibliothèque ferme la connexion prématurément. Jusqu'à ce que cela soit géré, le mieux que vous puissiez faire est de mettre un minuteur en erreur et de vous reconnecter.

Je veux savoir comment puis-je me reconnecter lorsque la connexion à la glace est déconnectée? J'ai essayé tellement de code mais cela ne fonctionne pas

Je veux savoir comment puis-je me reconnecter lorsque la connexion à la glace est déconnectée? J'ai essayé tellement de code mais cela ne fonctionne pas

Cette bibliothèque ne vous permettra pas d'effectuer une récupération progressive de l'état déconnecté car elle ferme immédiatement la connexion. La seule chose que vous pouvez faire est d'écouter on('error') , puis de vous connecter exactement de la même manière que vous l'avez fait lorsque vous avez configuré votre connexion d'origine. C'est assez pénible.

remarque: il y a deux endroits pour vérifier les erreurs. Sur le pair lui-même et sur la connexion elle-même. En ce qui concerne la connexion, ils sont à peu près tous fatals comme cette bibliothèque est maintenant, bien qu'ils ne devraient pas l'être. Sur le pair lui-même, de nombreuses erreurs sont fatales, mais pas toutes.

Pour les erreurs de socket sur le pair, j'ai quelque chose comme ceci:

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

où backoff est une valeur en secondes que j'incrémente à chaque fois que j'essaye jusqu'à un maximum.

Pour l'erreur de pair, j'ai quelque chose comme ceci:

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

Et puis pour la connexion (mediaConnection dans mon cas) j'ai ceci.

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

Et le reconnectTimeout mentionné ci-dessus est une fonction simple qui essaie à nouveau toute la connexion.

En théorie, cette bibliothèque pourrait gérer iceRestarts et ne pas être fatale en cas de déconnexion de la glace, ce qui, je pense, résoudrait la majorité des problèmes. J'ai un PR pour la déconnexion, mais pas encore pour les redémarrages.

monsieur j'utilise peer.js pour l'ensemble du projet voici le lien pour le fichier peerjs
https://github.com/peers/peerjs/blob/master/dist/peerjs.js

maintenant ce que je reçois un problème lorsque 2 pairs se sont connectés pour un appel vidéo, quand un pair obtient une connexion lente iceconnection déconnecte les deux pairs

et c'est le code dans le fichier peerjs où il déconnecte les deux homologues

''
peerConnection.oniceconnectionstatechange = function () {
commutateur (peerConnection.iceConnectionState) {
cas "échoué":
logger_1.default.log ("iceConnectionState a échoué, fermeture des connexions à" + 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 

cas "déconnecté":
logger_1.default.log ("iceConnectionState est déconnecté, fermant les connexions à" + peerId);

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

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

''

ici la connexion se rapproche et ici je veux reconnecter la connexion de glace

Relisez ma réponse. Je l'ai expliqué aussi clairement que je sais comment.

Cette bibliothèque ne vous permettra pas d'effectuer une récupération progressive de l'état déconnecté car elle ferme immédiatement la connexion. La seule chose que vous pouvez faire est d'écouter ("erreur"), puis de vous connecter exactement de la même manière que vous l'avez fait lorsque vous avez configuré votre connexion d'origine. C'est assez pénible.

Votre seule autre option est de le fork, ou d'utiliser mon fork ici: https://github.com/peers/peerjs/pull/655

une autre option? ou si vous pouvez m'aider dans peer js où et quel code dois-je écrire en cas d'erreur?
je suis vraiment coincé monsieur ....

@jrowny merci pour une enquête. nous l'expédierons en 1.3.0

Cette page vous a été utile?
0 / 5 - 0 notes