Peerjs: id tidak tersedia setelah koneksi internet terputus

Dibuat pada 24 Jul 2014  ·  33Komentar  ·  Sumber: peers/peerjs

Hai,
ini adalah bagaimana saya mereproduksi kesalahan ini:

jika saya menutup dan membuka kembali koneksi internet, itu menimbulkan kesalahan ini.

PeerJS:  WARNING You received a malformed message from undefined of type HTTP-ERROR peer.js:1117
PeerJS:  Socket open peer.js:1117
PeerJS:  ERROR Aborting. Error: ID `1` is taken peer.js:1117

dan saya tidak menggunakan id acak yang dihasilkan dari peerserver. id rekan klien selalu sama dan unik (saya mendapatkannya dari nilai kunci utama pengguna dari database)

Tidak apa-apa saat saya beralih di antara halaman situs web saya. (saya meletakkan kode inisialisasi rekan di base.js saya yang dimuat di setiap halaman),

beralih antar halaman adalah semacam pemutusan dari server kan? tapi kenapa ini terjadi hanya ketika koneksi internet terputus?

saya menangani kesalahan ini di bawah peer.on('error') , meskipun saya menulis peer.destroy() di sini, saya tidak berfungsi.

help wanted

Komentar yang paling membantu

Adakah yang menemukan solusi yang bagus? Saya menggunakan ID hardcode untuk memudahkan orang terhubung satu sama lain dan menyimpan data lokal (tentang rekan lainnya), jadi mengubah ID bukanlah solusi terbaik bagi saya.

Semua 33 komentar

Masalah yang sama disini. Hanya terjadi ketika koneksi internet direset dan tidak berhasil dengan peer.destroy()

saya pikir (dan berharap) @michelle dapat membantu kami dalam hal ini.

untuk saat ini, saya beralih ke sistem peer-id berbasis redis. saya menyimpan semua id rekan pengguna di redis, dan setiap kali saya mendapatkan kesalahan ini, mengirimkan permintaan melalui ajax ke server untuk menghasilkan id baru untuk pengguna ini. dan pada keberhasilan (jika id berhasil dibuat) saya memuat ulang halaman. dan pengguna baru saja menghasilkan peer-id. @maasud

Ya sepertinya soket web tidak memancarkan 'tutup' dengan benar/konsisten di peerserver, tapi saya bingung mengapa begitu.

Ada kemajuan/solusi di sini? Baru saja mengalami masalah yang sama ...

Sama untuk ku

Saya mengalami masalah yang sama. Apakah peer.reconnect merupakan pilihan?

Hancurkan saja dan hubungkan. Sambungkan kembali akan gagal juga

Masih menghadapi masalah ini. @rekan tolong selesaikan masalah ini.

@michelle : Saya punya solusi sementara. Ketika server rekan mengeluarkan kesalahan yang mengatakan bahwa id rekan diambil, dapatkah kita memeriksa apakah ada koneksi yang aktif pada id yang sama. Jika tidak, maka server rekan dapat menghapus id rekan itu dari server. Apakah ini akan berhasil?

Ada pembaruan di sini? peerjs tampaknya tidak terlalu dipertahankan. Saya mungkin mencoba memodifikasi server rekan dan mencoba ide Anda @shashvattrip.

Hei @ncri , ya tolong lakukan. Saya juga akan mencobanya segera setelah saya mendapatkan sedikit waktu dari proyek saya saat ini.

Oke, well, juga agak kekurangan waktu, tapi berharap untuk segera memeriksanya. Sejauh ini saya mendapat solusi yang berfungsi, meskipun tidak terlalu memuaskan: setelah beberapa kali mencoba id menjadi tersedia lagi ...

Ya, sama di sini. Saya telah mencoba mengubah id rekan pada id tidak tersedia. Tapi saya tidak ingin meretasnya, perlu ada mekanisme kerja langsung untuk menangani skenario ini

Saya dapat menghindari kesalahan dengan mengirimkan token yang sama saat membuat ulang objek rekan setelah koneksi kembali. Tidak yakin apakah ini ideal, tetapi sejauh ini berfungsi dengan baik.

Jika peerjs-server dapat dimodifikasi untuk menghapus pengguna itu, itu akan dilakukan. Apakah ada perbaikan yang berfungsi sekarang?

Masalah yang sama disini. mencoba dengan peer.destroy() tapi tidak ada. Adakah yang bisa membantu saya?

Adakah yang menemukan solusi yang bagus? Saya menggunakan ID hardcode untuk memudahkan orang terhubung satu sama lain dan menyimpan data lokal (tentang rekan lainnya), jadi mengubah ID bukanlah solusi terbaik bagi saya.

https://github.com/peers/peerjs/blob/master/dist/peer.js#L733
Adakah yang bisa menjelaskan arti dari string ini?

Saya melakukan penyelidikan dalam kode server dan menemukan masalah itu dalam string itu, mungkin.
https://github.com/peers/peerjs-server/blob/master/lib/server.js#L255

Jadi bagaimana cara kerjanya sekarang - klien setiap kali terhubung kembali, menghasilkan token baru, server memeriksanya dan menghasilkan pesan kesalahan sebagai tanggapan.
Bagaimana saya menyelesaikannya:

const token = util.randomToken();
...
  options = util.extend({
    debug: 1, // 1: Errors, 2: Warnings, 3: All logs
    host: util.CLOUD_HOST,
    port: util.CLOUD_PORT,
    key: 'peerjs',
    path: '/',
    token: token,
    config: util.defaultConfig
  }, options);

Apa yang mungkin salah dengan solusi saya?
Karena saya benar-benar tidak mengerti mengapa kami tidak dapat menyimpan satu token untuk satu halaman.

Adakah pembaruan tentang masalah ini? peer.destroy() tidak membantu...

Masalah yang sama setelah 4 tahun, saya kira ada masalah pemeliharaan :|

Apakah ada batas waktu id atau cara untuk merangsang status ID yang diambil sebenarnya?

Hai, kami mempertahankannya lagi, tetapi saya tidak dapat memeriksa semua masalah lama yang memeriksa apakah telah diperbaiki atau tidak, browser telah banyak berubah.

Biarkan saya melihatnya untuk melihat apakah saya dapat menemukan solusi. Tentu saja, kontribusi apa pun dipersilakan.

Seperti yang disebutkan sebelumnya, acara tutup tidak berfungsi dengan baik untuk koneksi yang hilang. Ide saya adalah memberikan token (kata sandi) unik ketika Anda terhubung menggunakan ID, dan jika rekan lain terhubung menggunakan ID dan token itu, maka saya akan menganggap itu adalah Anda, dan akan menerima koneksi Anda.

Apa pendapat Anda tentang pendekatan ini?

Halo,

secara teknis, itu akan berhasil, tetapi saya khawatir tentang kerentanan keamanan, dengan cara ini, saya dapat setiap saat meniru ID lain dan mendapatkan pesan yang diarahkan kepadanya.

Jika tidak ada cara lain, solusi Anda lebih baik daripada tidak sama sekali, jadi id token statis dapat bekerja dengan peerJS (jika tidak, kami perlu menukar id dinamis .. hampir seperti server pensinyalan lain)

Saya akan memiliki beberapa ide untuk meningkatkan keamanan, saya tidak tahu kode di bawah jadi saya mengatakan hal-hal yang mudah atau tidak untuk dilakukan, Anda mengevaluasi kelayakannya:

Apakah ada kemungkinan untuk memeriksa koneksi yang hilang dengan batas waktu dan secara otomatis memutuskan koneksi yang hilang?
Jika tidak sesuai permintaan (ini akan memakan sumber daya yang lebih sedikit), ketika id yang sama terhubung kembali, apakah mungkin untuk memeriksa apakah koneksi sebelumnya masih hidup (seperti ping)? jika jawaban sebelumnya dalam X detik koneksi baru ditolak, jika tidak, yang sebelumnya ditutup dan yang baru menang, apakah mungkin?

Terima kasih atas waktu Anda

Nah, Anda tidak akan dapat menyamar karena Anda memerlukan Token (kata sandi) awal PeerServer yang dikirimkan kepada Anda saat pertama kali Anda terhubung.

Tentang proposal Anda, masalahnya, biasanya Anda perlu memberikan beberapa detik untuk ping untuk kembali. Dan apa yang Anda usulkan, itu akan berhasil, tetapi jika Anda kehilangan koneksi dan menyambung kembali, Anda mungkin perlu menunggu sekitar 30 detik. Itu banyak waktu.

o ok, saya tidak tahu protokolnya, jadi sepertinya sempurna

Halo,

menurut saya token tersebut sudah harus digunakan untuk menerima koneksi pengguna di server, apakah mungkin? Bisakah Anda memberi tahu saya jika saya salah?

dalam hal ini masalahnya adalah bahwa token berubah, dapatkah hanya dengan memuat ulang halaman jika tidak dimasukkan ke dalam cookie atau serupa, sebagai perbaikan, dapatkah token dipaksa di sisi klien?

app._configureWS = function(socket, key, id, token) {
  var self = this;
  var client = this._clients[key][id];

  if (token === client.token) {
    // res 'close' event will delete client.res for us
    client.socket = socket;
    // Client already exists
    if (client.res) {
      client.res.end();
    }
  } else {
    // ID-taken, invalid token
    socket.send(
      JSON.stringify({ type: "ID-TAKEN", payload: { msg: "ID is taken" } })
    );
    socket.close();
    return;
  }

Apa pembaruan untuk ini? @kidandcat Saya juga menghadapi masalah yang sama ketika saya mencoba untuk terhubung kembali dengan rekan yang sama. Kesalahan melemparnya dan dihancurkan.

Kami menambahkan pesan detak jantung dari klien ke server. Jadi, saya pikir kita dapat memeriksanya dan menutup koneksi jika tidak terjawab

diperbaiki di 1.0.4+

Kesalahan yang sama BELUM DIPERBAIKI

Masih terjadi dan bersifat sporadis

Pembunuhannya,,,,, apa yang harus dilakukan untuk kesalahannya

Apakah PeerJS direkomendasikan untuk beberapa proyek besar. Karena kesalahan semacam ini membunuh proyek.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat