أواجه بعض المشكلات في نقل الملفات باستخدام PeerJS ... عملية النقل تسير على ما يرام ، وبعد ذلك يقوم PeerJS بإغلاق DataChannel ، ولا يوجد سجل لما حدث من خطأ. لقد قمت بتشغيل تصحيح الأخطاء لـ PeerJS ، وأنا أقوم بتشغيل PeerServer محليًا حتى أتمكن من الحصول على سجلات تصحيح الأخطاء.
سجلات PeerJS في وحدة تحكم Chrome:
... النقل يسير على ما يرام ، ثم يتم تسجيل سطر "DataChannel مغلق لـ: abc123_f9pes" ويموت الاتصال ويموت النقل.
يسجل PeerServer في الجهاز:
... النقل يسير على ما يرام ، وبعد ذلك يتم تسجيل سطري "إغلاق المقبس" ، متبوعًا بوفاة التحويل.
سؤالي الأول هو ، لماذا تم تسجيل "مرشح ICE المضاف لـ" و "ترشيحات ICE المتلقاة" عدة مرات بواسطة PeerJS ، وخطوط "المرشح من" بواسطة PeerServer؟
سؤالي الآخر هو ، لماذا تم قطع الاتصال؟ يبدو أن المقبس يتم إغلاقه ... هل من أفكار عما قد يحدث خطأ؟
إليك نظرة عامة على بيئتي:
ملاحظة: استمرت هذه المشكلة حتى عند تشغيل خادم PeerServer المستضاف على السحابة.
اتضح أنني كنت أقرأ الملف بسرعة كبيرة ، وتم ملء المخزن المؤقت لقناة بيانات 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) تقريبًا.
التعليق الأكثر فائدة
تضمين التغريدة
تصحيح صغير: 16 كيلو بايت ، وليس 16 ميجا بايت ، للرجوع إليه في المستقبل. واجهت نفس المشكلة. يبلغ حد Firefox 16 كيبايت (https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits) تقريبًا.