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

  • alex maybury

    alex maybury

    20 Aralık 2007
  • Triune Films

    Triune Films

    9 ŞUBAT 2006
  • UsherVEVO

    UsherVEVO

    15 EKİM 2009