Peerjs: يتم إغلاق قناة DataChannel بشكل غير متوقع وبدون سبب

تم إنشاؤها على ١ أبريل ٢٠١٥  ·  5تعليقات  ·  مصدر: peers/peerjs

أواجه بعض المشكلات في نقل الملفات باستخدام PeerJS ... عملية النقل تسير على ما يرام ، وبعد ذلك يقوم PeerJS بإغلاق DataChannel ، ولا يوجد سجل لما حدث من خطأ. لقد قمت بتشغيل تصحيح الأخطاء لـ PeerJS ، وأنا أقوم بتشغيل PeerServer محليًا حتى أتمكن من الحصول على سجلات تصحيح الأخطاء.

سجلات PeerJS في وحدة تحكم Chrome:

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

... النقل يسير على ما يرام ، ثم يتم تسجيل سطر "DataChannel مغلق لـ: abc123_f9pes" ويموت الاتصال ويموت النقل.

يسجل PeerServer في الجهاز:

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

... النقل يسير على ما يرام ، وبعد ذلك يتم تسجيل سطري "إغلاق المقبس" ، متبوعًا بوفاة التحويل.

سؤالي الأول هو ، لماذا تم تسجيل "مرشح ICE المضاف لـ" و "ترشيحات ICE المتلقاة" عدة مرات بواسطة PeerJS ، وخطوط "المرشح من" بواسطة PeerServer؟

سؤالي الآخر هو ، لماذا تم قطع الاتصال؟ يبدو أن المقبس يتم إغلاقه ... هل من أفكار عما قد يحدث خطأ؟

إليك نظرة عامة على بيئتي:

  • PeerJS v0.3.13
  • بيرسيرفير v0.2.8
  • كروم v41
  • نظام التشغيل Mac OS X الإصدار 10.10.2

ملاحظة: استمرت هذه المشكلة حتى عند تشغيل خادم PeerServer المستضاف على السحابة.

التعليق الأكثر فائدة

تضمين التغريدة

إذا تم إرسال الكثير من الرسائل معًا ، فمن المحتمل ألا يتم إرسالها مرة واحدة. يتم وضعها في المخزن المؤقت للإدخال. لكن الحاجز لا يمكن أن ينمو بلا حدود ؛ عادة ما يكون له حد معين مسبقًا. إذا تم تجاوز الحد ، فسيتم إغلاق قناة البيانات في Chrome> = 37 ، ويتم تجاهل جميع الرسائل ، ويتم طرح استثناء. ولكن في Chrome <= 36 ، يتم طرح استثناء فقط. إذن هذا تغيير يكسر واجهة برمجة التطبيقات تم إجراؤه في Chrome 37. يجب على المطورين توخي الحذر عند إجراء هذا التغيير إذا كانوا يتعاملون مع المتصفحات القديمة.

تصحيح صغير: 16 كيلو بايت ، وليس 16 ميجا بايت ، للرجوع إليه في المستقبل. واجهت نفس المشكلة. يبلغ حد Firefox 16 كيبايت (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) تقريبًا.

ال 5 كومينتر

اتضح أنني كنت أقرأ الملف بسرعة كبيرة ، وتم ملء المخزن المؤقت لقناة بيانات WebRTC ، والذي يبلغ حده 16 ميغا بايت:

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

إذا تم إرسال الكثير من الرسائل معًا ، فمن المحتمل ألا يتم إرسالها مرة واحدة. يتم وضعها في المخزن المؤقت للإدخال. لكن الحاجز لا يمكن أن ينمو بلا حدود ؛ عادة ما يكون له حد معين مسبقًا. إذا تم تجاوز الحد ، فسيتم إغلاق قناة البيانات في Chrome> = 37 ، ويتم تجاهل جميع الرسائل ، ويتم طرح استثناء. ولكن في Chrome <= 36 ، يتم طرح استثناء فقط. إذن هذا تغيير يكسر واجهة برمجة التطبيقات تم إجراؤه في Chrome 37. يجب على المطورين توخي الحذر عند إجراء هذا التغيير إذا كانوا يتعاملون مع المتصفحات القديمة.

يا إلهي ... لقد واجهت نفس المشكلة بالضبط ، مع peerJS أيضًا ولم أتمكن من العثور على أي إجابة (كنت أفترض أن هناك نوعًا من الأشياء ذات الصلة بالمخزن المؤقت) ، شكرًا لك على فكرة أخيرًا ، آمل أن تكون هذه الإرادة حل مشكلتي. من المثير للاهتمام أن peerJS لديها آلية داخلية للتخزين المؤقت ، والتي ، كما أفهم ، تم إجراؤها بشكل صحيح لهذه المشكلة ، ومع ذلك يبدو أن التطبيق الذي تم تنفيذه يعتمد على اصطياد استثناء من عدم القدرة على الإرسال ، وإذا تم قتل الكروم الجديد في chunnel ، فهذا النظام الآن زائدة عن الحاجة. سأقوم هنا بإثارة مشكلة حول هذا الموضوع ، في أقرب وقت (إذا) سأكون متأكدًا من أن هذا هو السبب.

تحرير: نعم يبدو شرعيًا ، ويصل المبلغ المخزن إلى حوالي 16 ميجا بايت وفشل كل شيء.

نعم ، كان هذا خطأ مؤلمًا للكشف. استغرق الأمر مني أيامًا لفهم ما كان يحدث أخيرًا. يحتاج PeerJS إلى التحديث للتعامل بشكل صحيح عندما يفيض المخزن المؤقت لقناة البيانات ، ويقطع Chrome الاتصال.

بالمناسبة ، إذا تعثر شخص ما في هذا الأمر ، فتحت مشكلة ونشرت هناك تعديلًا صغيرًا لمصدر peer.js لإصلاح ذلك https://github.com/peers/peerjs/issues/291

تضمين التغريدة

إذا تم إرسال الكثير من الرسائل معًا ، فمن المحتمل ألا يتم إرسالها مرة واحدة. يتم وضعها في المخزن المؤقت للإدخال. لكن الحاجز لا يمكن أن ينمو بلا حدود ؛ عادة ما يكون له حد معين مسبقًا. إذا تم تجاوز الحد ، فسيتم إغلاق قناة البيانات في Chrome> = 37 ، ويتم تجاهل جميع الرسائل ، ويتم طرح استثناء. ولكن في Chrome <= 36 ، يتم طرح استثناء فقط. إذن هذا تغيير يكسر واجهة برمجة التطبيقات تم إجراؤه في Chrome 37. يجب على المطورين توخي الحذر عند إجراء هذا التغيير إذا كانوا يتعاملون مع المتصفحات القديمة.

تصحيح صغير: 16 كيلو بايت ، وليس 16 ميجا بايت ، للرجوع إليه في المستقبل. واجهت نفس المشكلة. يبلغ حد Firefox 16 كيبايت (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) تقريبًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات