Peerjs: Bagaimana peer.js dapat terhubung kembali ke peer yang sama setelah terputus?

Dibuat pada 14 Apr 2020  ·  7Komentar  ·  Sumber: peers/peerjs

saya perlu tahu apakah 2 rekan terhubung saat panggilan ketika kami mendapat pesan - status koneksi es terputus, itu menutup semua jendela dan dicsonnect 2 peer. Bisakah kita menangani untuk menyambung kembali ketika server es terputus?

bug

Komentar yang paling membantu

Saya ingin tahu bagaimana saya dapat menyambung kembali saat iceconnection terputus? Saya telah mencoba begitu banyak kode tetapi tidak berhasil

Pustaka ini tidak akan mengizinkan Anda melakukan pemulihan yang anggun dari status terputus karena segera menutup koneksi. Satu-satunya hal yang dapat Anda lakukan adalah mendengarkan on('error') dan kemudian menghubungkan dengan cara yang sama persis seperti yang Anda lakukan ketika Anda mengatur koneksi asli Anda. Cukup merepotkan.

catatan: ada dua tempat untuk memeriksa kesalahan. Pada rekan itu sendiri dan pada koneksi itu sendiri. Dalam kaitannya, mereka hampir semuanya fatal seperti perpustakaan ini sekarang, meskipun seharusnya tidak demikian. Pada peer itu sendiri, banyak error yang berakibat fatal, tetapi tidak semuanya.

Untuk kesalahan soket pada rekan saya memiliki sesuatu seperti ini:

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

di mana kemunduran adalah nilai dalam hitungan detik yang saya tingkatkan setiap kali saya mencoba hingga maksimum.

Untuk kesalahan rekan saya memiliki sesuatu seperti ini:

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

Dan kemudian untuk koneksi (mediaConnection dalam kasus saya) saya punya ini.

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

Dan yang disebutkan reconnectTimeout adalah fungsi sederhana yang mencoba seluruh koneksi lagi.

Dalam teori, perpustakaan ini dapat menangani iceRestarts dan tidak berakibat fatal pada pemutusan sambungan es, yang saya percaya akan menyelesaikan sebagian besar masalah. Saya memiliki PR untuk hal yang memutuskan hubungan, tetapi belum untuk memulai ulang.

Semua 7 komentar

status es yang terputus seharusnya dapat dipulihkan, tetapi saat ini pustaka ini menutup koneksi sebelum waktunya. Sampai itu ditangani, hal terbaik yang dapat Anda lakukan adalah memasang timer pada kesalahan dan menyambungkan kembali.

Saya ingin tahu bagaimana saya dapat menyambung kembali saat iceconnection terputus? Saya telah mencoba begitu banyak kode tetapi tidak berhasil

Saya ingin tahu bagaimana saya dapat menyambung kembali saat iceconnection terputus? Saya telah mencoba begitu banyak kode tetapi tidak berhasil

Pustaka ini tidak akan mengizinkan Anda melakukan pemulihan yang anggun dari status terputus karena segera menutup koneksi. Satu-satunya hal yang dapat Anda lakukan adalah mendengarkan on('error') dan kemudian menghubungkan dengan cara yang sama persis seperti yang Anda lakukan ketika Anda mengatur koneksi asli Anda. Cukup merepotkan.

catatan: ada dua tempat untuk memeriksa kesalahan. Pada rekan itu sendiri dan pada koneksi itu sendiri. Dalam kaitannya, mereka hampir semuanya fatal seperti perpustakaan ini sekarang, meskipun seharusnya tidak demikian. Pada peer itu sendiri, banyak error yang berakibat fatal, tetapi tidak semuanya.

Untuk kesalahan soket pada rekan saya memiliki sesuatu seperti ini:

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

di mana kemunduran adalah nilai dalam hitungan detik yang saya tingkatkan setiap kali saya mencoba hingga maksimum.

Untuk kesalahan rekan saya memiliki sesuatu seperti ini:

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

Dan kemudian untuk koneksi (mediaConnection dalam kasus saya) saya punya ini.

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

Dan yang disebutkan reconnectTimeout adalah fungsi sederhana yang mencoba seluruh koneksi lagi.

Dalam teori, perpustakaan ini dapat menangani iceRestarts dan tidak berakibat fatal pada pemutusan sambungan es, yang saya percaya akan menyelesaikan sebagian besar masalah. Saya memiliki PR untuk hal yang memutuskan hubungan, tetapi belum untuk memulai ulang.

Pak, saya menggunakan peer.js untuk keseluruhan proyek ini adalah tautan untuk file peerjs
https://github.com/peers/peerjs/blob/master/dist/peerjs.js

sekarang apa yang saya dapatkan masalah ketika 2 rekan saling terhubung untuk panggilan video, ketika satu rekan mendapatkan koneksi lambat iceconnection putuskan kedua rekan

dan ini adalah kode dalam file peerjs yang akan memutuskan kedua peer

``
peerConnection.oniceconnectionstatechange = function () {
switch (peerConnection.iceConnectionState) {
kasus "gagal":
logger_1.default.log ("iceConnectionState gagal, menutup koneksi ke" + 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 

kasus "terputus":
logger_1.default.log ("iceConnectionState terputus, menutup koneksi ke" + peerId);

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

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

``

di sini koneksi dekat dan di sini saya ingin menghubungkan kembali koneksi es

Baca ulang balasan saya. Saya menjelaskannya sejelas yang saya tahu caranya.

Pustaka ini tidak akan mengizinkan Anda melakukan pemulihan yang anggun dari status terputus karena segera menutup koneksi. Satu-satunya hal yang dapat Anda lakukan adalah mendengarkan di ('error') dan kemudian menghubungkan dengan cara yang sama persis seperti yang Anda lakukan ketika Anda mengatur koneksi asli Anda. Cukup merepotkan.

Satu-satunya pilihan Anda yang lain adalah untuk membuatnya, atau gunakan garpu saya di sini: https://github.com/peers/peerjs/pull/655

ada pilihan lain? atau jika Anda dapat membantu saya di peer js di mana dan kode apa yang harus saya tulis pada kesalahan?
saya benar-benar buntu pak ....

@jrowny terima kasih atas penyelidikannya. kami akan mengirimkannya di 1.3.0

Apakah halaman ini membantu?
0 / 5 - 0 peringkat