Peerjs: DataChannel ditutup secara tidak terduga, dan tanpa alasan

Dibuat pada 1 Apr 2015  ·  5Komentar  ·  Sumber: peers/peerjs

Saya mengalami beberapa masalah dengan mentransfer file menggunakan PeerJS... transfer berjalan dengan baik, dan kemudian PeerJS hanya menutup DataChannel, dan tidak ada catatan apa yang salah. Saya telah mengaktifkan debugging untuk PeerJS, dan saya menjalankan PeerServer secara lokal sehingga saya bisa mendapatkan log debugging.

PeerJS masuk ke konsol Chrome:

screen shot 2015-03-31 at 8 35 25 pm

... transfer berjalan dengan baik, dan kemudian baris "DataChannel ditutup untuk: abc123_f9pes" dicatat, koneksi mati, dan transfer mati.

PeerServer masuk ke terminal:

screen shot 2015-03-31 at 8 35 45 pm

... transfer berjalan dengan baik, dan kemudian 2 baris "Socket ditutup" dicatat, diikuti dengan kematian transfer.

Pertanyaan pertama saya adalah, mengapa baris "Calon ICE yang ditambahkan untuk" dan "Calon ICE yang diterima untuk" dicatat beberapa kali oleh PeerJS, dan baris "CANDIDATE dari" oleh PeerServer?

Pertanyaan saya yang lain adalah, mengapa koneksi terputus? Sepertinya soketnya sedang ditutup ... ada ide tentang apa yang salah?

Berikut ini ikhtisar lingkungan saya:

  • PeerJS v0.3.13
  • PeerServer v0.2.8
  • Chrome v41
  • Mac OS X v10.10.2

ps masalah ini tetap ada bahkan ketika berjalan melawan PeerServer yang dihosting cloud.

Komentar yang paling membantu

@UnsungHero97

Jika banyak pesan yang dikirim bersama-sama, mereka tidak mungkin dikirim sekaligus. Mereka dimasukkan ke dalam buffer input. Tetapi penyangga tidak dapat tumbuh tanpa batas; biasanya memiliki beberapa batas yang telah ditentukan sebelumnya. Jika batas terlampaui maka di Chrome >= 37 saluran data ditutup, semua pesan dibuang, dan pengecualian dibuang. Namun di Chrome <= 36, hanya pengecualian yang dilemparkan. Jadi ini adalah perubahan pemecah API yang dibuat di Chrome 37. Pengembang harus berhati-hati dengan perubahan ini jika mereka berurusan dengan browser lama.

Koreksi kecil: 16 KB, bukan 16 MB, untuk referensi di masa mendatang. Saya menghadapi masalah yang sama. Batas Firefox adalah 16kiB (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) kurang lebih sama.

Semua 5 komentar

Ternyata saya membaca file terlalu cepat, dan buffer saluran data WebRTC terisi, yang memiliki batas 16 megabyte:

http://viblast.com/blog/2015/2/25/webrtc-bufferedamount/

Jika banyak pesan yang dikirim bersama-sama, mereka tidak mungkin dikirim sekaligus. Mereka dimasukkan ke dalam buffer input. Tetapi penyangga tidak dapat tumbuh tanpa batas; biasanya memiliki beberapa batas yang telah ditentukan sebelumnya. Jika batas terlampaui maka di Chrome >= 37 saluran data ditutup, semua pesan dibuang, dan pengecualian dibuang. Namun di Chrome <= 36, hanya pengecualian yang dilemparkan. Jadi ini adalah perubahan pemecah API yang dibuat di Chrome 37. Pengembang harus berhati-hati dengan perubahan ini jika mereka berurusan dengan browser lama.

Ya Tuhan ... Saya mengalami masalah yang sama persis, dengan peerJS juga dan saya tidak dapat menemukan jawaban apa pun (saya berasumsi bahwa ini semacam hal yang terkait dengan buffer), Terima kasih atas sebuah ide akhirnya, saya harap ini akan memecahkan masalah saya. Sangat menarik bahwa peerJS memiliki mekanisme buffering dalam, yang, seperti yang saya pahami, dibuat tepat untuk masalah ini, NAMUN implementasinya tampaknya bergantung pada penangkapan pengecualian dari tidak dapat mengirim, dan jika di chunnel chrome baru baru saja dibunuh, ini sistem sekarang berlebihan. Saya akan membuat masalah di sini tentang hal itu, segera (jika) saya akan yakin bahwa inilah alasannya.

Sunting: yup terlihat sah, bufferedAmount mencapai sekitar 16mb dan semuanya gagal.

Ya, ini adalah bug yang menyakitkan untuk diungkap. Butuh berhari-hari bagi saya untuk akhirnya memahami apa yang terjadi. PeerJS perlu diperbarui untuk menangani dengan benar saat buffer saluran data meluap, dan Chrome mematikan koneksi.

Omong-omong, jika seseorang akan menemukan ini, saya membuka masalah dan memposting di sana sedikit edit ke sumber peer.js untuk memperbaikinya https://github.com/peers/peerjs/issues/291

@UnsungHero97

Jika banyak pesan yang dikirim bersama-sama, mereka tidak mungkin dikirim sekaligus. Mereka dimasukkan ke dalam buffer input. Tetapi penyangga tidak dapat tumbuh tanpa batas; biasanya memiliki beberapa batas yang telah ditentukan sebelumnya. Jika batas terlampaui maka di Chrome >= 37 saluran data ditutup, semua pesan dibuang, dan pengecualian dibuang. Namun di Chrome <= 36, hanya pengecualian yang dilemparkan. Jadi ini adalah perubahan pemecah API yang dibuat di Chrome 37. Pengembang harus berhati-hati dengan perubahan ini jika mereka berurusan dengan browser lama.

Koreksi kecil: 16 KB, bukan 16 MB, untuk referensi di masa mendatang. Saya menghadapi masalah yang sama. Batas Firefox adalah 16kiB (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) kurang lebih sama.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

afrokick picture afrokick  ·  5Komentar

bilo1967 picture bilo1967  ·  7Komentar

furozen picture furozen  ·  9Komentar

lucastwong picture lucastwong  ·  3Komentar

RikdeVos picture RikdeVos  ·  6Komentar