كيفية الحصول على معدل النقل الحالي في المشاعات httpclient 3.x

StackOverflow https://stackoverflow.com/questions/1741797

  •  20-09-2019
  •  | 
  •  

سؤال

لديّ بعض الكود الذي يقوم بمجموعة من HTTP يحصل عليها ، وتستخدمها ، وتستخدمها المشاعات httpclient 3.1. أرغب في تقديم مؤشر سرعة نقل حالي في واجهة المستخدم الرسومية الخاصة بي ، لكنني لم أتمكن من العثور على أي طرق لتحديد معدل نقل HTTPMethod الذي يتم معالجته.

يمكنني بسهولة وقت النقل والقيام ببعض الرياضيات البسيطة بعد اكتماله لتحديد السرعة ، ولكن هذا يوفر تجربة مستخدم سيئة أثناء التحميل أو التنزيل الطويل. هل يعرف أي شخص كيفية تحديد معدل نقل طلب HTTPClient المشاع في حين لا يزال يجري معالجته؟

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

المحلول

لم أستخدم httpclient على نطاق واسع ، لذلك قد يكون هناك خطاف بسيط. ومع ذلك ، يبدو ذلك httpconnection.getResponseInputStream () يعيد بسيطة InputStream.

لإضافة الخطاف بنفسك ، ستحتاج إلى تجاوز HttpConnectionManager و HttpConnection, ، لإرجاع تيار مزخرف يتتبع عدد البايتات القراءة. يمكنك بعد ذلك تدوير مؤشر ترابط ثانٍ لاستطلاع هذا الدفق وعرض معدل النقل ، أو (أفضل) إنشاء الدفق مع رد اتصال كل بايت (أفضل لأنك لا تضطر إلى الاهتمام بالتزامن ، ويمكنك أيضًا تعيين N بحيث يتم استدعاء رد الاتصال فقط للملفات الكبيرة).

نصائح أخرى

سيكون الخطاف الأكثر بساطة هو تمديد HttpEntityWrapper وتجاوز getContent() طريقة:

public InputStream getContent() throws IOException {
    InputStream wrappedin = wrappedEntity.getContent();
    return new MyTransferRateInputStream(wrappedin);
}

في وقت لاحق يمكنك إضافة هذا باعتباره اعتراض الاستجابة

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

بهذه الطريقة لا تحتاج إلى تجاوز المذكورة HttpConnectionManager و HttpConnection

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