SORU
15 AĞUSTOS 2009, CUMARTESİ


En iyi Uygulama çok iş Parçacıklı Ortamda HttpClient Kullanımı

Tüm bunlar olurken, çok iş parçacıklı ortamda HttpClient kullanıyorum. Bir bağlantı başlatmak her iş parçacığı için, tamamen yeni bir HttpClient bir örneğini oluşturun.

Son zamanlarda fark ettim ki, bu yaklaşım kullanarak, kullanıcı, çok fazla port açılmış olması neden olabilir, ve bağlantıların çoğu TIME_WAIT durumdadır.

http://www.opensubscriber.com/message/commons-httpclient-dev@jakarta.apache.org/86045.html

Dolayısıyla, iş parçacığı başına yapmak yerine :

HttpClient c = new HttpClient();
try {
    c.executeMethod(method);
}
catch(...) {
}
finally {
    method.releaseConnection();
}

İçin :

[YÖNTEM]

// global_c is initialized once through
// HttpClient global_c = new HttpClient(new MultiThreadedHttpConnectionManager());

try {
    global_c.executeMethod(method);
}
catch(...) {
}
finally {
    method.releaseConnection();
}

Normal durumda, global_c aynı anda 50 iş parçacıkları tarafından erişilebilir olacak. Bu herhangi bir performans sorunu ortaya çıkar olup olmadığını merak ediyorum. Olur MultiThreadedHttpConnectionManager kilidi serbest iş parçacığı güvenli politikasını uygulamak için bir mekanizma kullanıyor?

Eğer 10 iş parçacığı global_c, diğer 40 iş parçacığı kilitli kullanıyorsanız mümkün mü?

Yoksa her iş parçacığı için daha iyi olur, her HttpClient için bir örnek oluşturmak, ama Bağlantı Yöneticisi açıkça serbest bırakın.

[YÖNTEM B]

MultiThreadedHttpConnectionManager connman = new MultiThreadedHttpConnectionManager();
HttpClient c = new HttpClient(connman);
try {
      c.executeMethod(method);
}
catch(...) {
}
finally {
    method.releaseConnection();
    connman.shutdown();
}

Olur connman.() kapatma performans sorunları muzdarip?

Daha iyi, uygulama 50 iş parçacığı kullandığınız için hangisi öğrenebilir miyim?

CEVAP
23 EYLÜL 2010, PERŞEMBE


Havuza ve kendi iş parçacığı güvenli Bir çünkü kesinlikle Yöntemi.

Httpclient 4 kullanıyorsanız.x, Bağlantı Yöneticisi denirThreadSafeClientConnManager. Bu daha fazla ayrıntı için link (aşağı kaydırın "bağlantı Havuzu yöneticisi"). Örneğin:

    HttpParams params = new BasicHttpParams();
    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    ClientConnectionManager cm = new ThreadSafeClientConnManager(params, registry);
    HttpClient client = new DefaultHttpClient(cm, params);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KSI

    KSI

    25 Temmuz 2009
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007
  • UberFacts

    UberFacts

    26 EKİM 2013