سؤال

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

هل كانت مفيدة؟

المحلول

يمكنك استخدام مفرغ/نافخة وهو مدمج في JDK.هناك أيضًا GZIPInputStream وGZIPOutputStream، لكن ذلك يعتمد حقًا على استخدامك الدقيق.

يحرر:

عند قراءة المزيد من التعليقات، يبدو أن حركة مرور الشبكة هي HTTP.اعتمادًا على الخادم، فمن المحتمل أن يكون لديه دعم للضغط (خاصة مع deflate/gzip).ثم تصبح المشكلة على العميل.إذا كان العميل عبارة عن متصفح، فمن المحتمل أنه يدعمه بالفعل.إذا كان عميلك أحد عملاء خدمات الويب أو عميل http تحقق من الوثائق الخاصة بهذه الحزمة لمعرفة ما إذا كانت مدعومة.

يبدو أن httpclient في jakarta-commons قد يطلب منك إجراء الضغط يدويًا.لتمكين هذا من جانب العميل، ستحتاج إلى القيام بشيء مثل

.addRequestHeader("Accept-Encoding","gzip,deflate");

نصائح أخرى

إذا كانت حركة مرور الشبكة تمر عبر HTTP، فإن معظم خوادم الويب/حاويات servlet المتنوعة تدعم الضغط المتفاوض عليه، على سبيل المثال، mod_deflate لـ Apache.

تعتمد خوارزمية الضغط الخاصة بك على ما تحاول تحسينه، ومقدار النطاق الترددي المتوفر لديك.

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

إذا كانت هذه شبكة WAN، فقد تجد حلول الأجهزة مثل ريفربيد أكثر فعالية، لأنها تعمل عبر نطاق واسع من حركة المرور، ولا تتطلب أي تغييرات في البرامج.

لدي حالة اختبار توضح فرق الضغط النسبي بين انكماش، تصفيتها، BZip2، وLzma.ما عليك سوى توصيل عينة من بياناتك واختبار التوقيت بين جهازين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top