Websockify: أعد النظر في الاستخدام المزعج والتوصية

تم إنشاؤها على ١٩ أبريل ٢٠١٣  ·  2تعليقات  ·  مصدر: novnc/websockify

حاليًا ، سيعطي websockify / websocket.py تحذيرًا في حالة عدم توفر "numpy":

تحذير: لا توجد وحدة نمطية "numpy" ، بروتوكول HyBi أبطأ أو معطل

هذا محير إلى حد ما. بادئ ذي بدء ، فإن HyBi بالتأكيد ليست "معطلة". وهل هي حقا أبطأ؟ لقد أجريت بعض الاختبارات باستخدام noVNC ، وحتى عند تشغيل مقاطع فيديو Youtube بمعدل إطارات مرتفع ، فإن العملية باستخدام websocket.py لا تستهلك الكثير من وحدة المعالجة المركزية على الإطلاق ؛ نادرًا ما يظهر في القائمة "العلوية" على الإطلاق. لذلك أنا أتساءل ، هل تم إجراء أي قياسات حقيقية على هذا؟ لقد أجريت بعض البحث في Google وفشلت في العثور على أي شيء (باستثناء مشاكل numpy ...). IMHO ، ما لم نتمكن من قياس أن numpy يحدث فرقًا جوهريًا ، أعتقد أنه سيكون من الأفضل والأكثر نظافة أن تتطلب وظائف Python القياسية فقط.

question

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

يرجع الجزء "الأبطأ أو المعطل" إلى وجود 4 وحدات مختلفة للبيثون اختيارية وتم التحقق منها باستخدام نفس الكود في الجزء العلوي من websocket.py. على سبيل المثال ، إذا لم يتم العثور على وحدة ssl ، فسيتم تعطيل TLS / wss. لقد دفعت للتو إلى تغيير من شأنه أن يجعل هذا أكثر وضوحًا.

Numpy هو بالتأكيد أسرع. باستخدام الاختبارات / latency.py + الاختبارات / latency.html test ، أحصل على النتائج التالية (مع تأخير إرسال قدره 10 مللي ثانية وتشغيله على المضيف المحلي فقط):

حجم الحزمة 2000 بايت:

  • يبلغ متوسط ​​زمن انتقال 0.8 مللي ثانية ذهابًا وإيابًا مع numpy
  • 1.6 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا بدون عدد كبير

حجم الحزمة 20000 بايت:

  • 2.5 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا مع عدد قليل
  • 9.2 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا بدون عدد كبير

حجم الحزمة 100000 بايت:

  • 6.3 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا مع numpy
  • 40.1 مللي ثانية في متوسط ​​زمن انتقال rountrip بدون عقدة

بالإضافة إلى ذلك ، مع أحجام حزم 100 كيلو بايت ، لا يقتصر وقت الاستجابة على زيادة 6 مرات دون حدوث مشكلة ، بل يبدأ الخادم في التأخر ويتعين على العميل التراجع مرارًا وتكرارًا أثناء الاختبار.

لاحظ أن numpy يؤثر حقًا فقط على العميل> الكشف عن بيانات الخادم ، لذلك بالنسبة لاستخدامات مثل noVNC ، سيكون الأمر غير ذي صلة بشكل أساسي. ومع ذلك ، فإن websockify ليس مخصصًا لـ noVNC فقط ، لذلك في حالة إرسال العميل الكثير من البيانات إلى الخادم ، يوفر numpy تحسينًا كبيرًا في الأداء.

ال 2 كومينتر

يرجع الجزء "الأبطأ أو المعطل" إلى وجود 4 وحدات مختلفة للبيثون اختيارية وتم التحقق منها باستخدام نفس الكود في الجزء العلوي من websocket.py. على سبيل المثال ، إذا لم يتم العثور على وحدة ssl ، فسيتم تعطيل TLS / wss. لقد دفعت للتو إلى تغيير من شأنه أن يجعل هذا أكثر وضوحًا.

Numpy هو بالتأكيد أسرع. باستخدام الاختبارات / latency.py + الاختبارات / latency.html test ، أحصل على النتائج التالية (مع تأخير إرسال قدره 10 مللي ثانية وتشغيله على المضيف المحلي فقط):

حجم الحزمة 2000 بايت:

  • يبلغ متوسط ​​زمن انتقال 0.8 مللي ثانية ذهابًا وإيابًا مع numpy
  • 1.6 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا بدون عدد كبير

حجم الحزمة 20000 بايت:

  • 2.5 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا مع عدد قليل
  • 9.2 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا بدون عدد كبير

حجم الحزمة 100000 بايت:

  • 6.3 مللي ثانية متوسط ​​زمن انتقال ذهابًا وإيابًا مع numpy
  • 40.1 مللي ثانية في متوسط ​​زمن انتقال rountrip بدون عقدة

بالإضافة إلى ذلك ، مع أحجام حزم 100 كيلو بايت ، لا يقتصر وقت الاستجابة على زيادة 6 مرات دون حدوث مشكلة ، بل يبدأ الخادم في التأخر ويتعين على العميل التراجع مرارًا وتكرارًا أثناء الاختبار.

لاحظ أن numpy يؤثر حقًا فقط على العميل> الكشف عن بيانات الخادم ، لذلك بالنسبة لاستخدامات مثل noVNC ، سيكون الأمر غير ذي صلة بشكل أساسي. ومع ذلك ، فإن websockify ليس مخصصًا لـ noVNC فقط ، لذلك في حالة إرسال العميل الكثير من البيانات إلى الخادم ، يوفر numpy تحسينًا كبيرًا في الأداء.

شكرا!

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