HttpUrlConnection a pooling

0
try {
        URL a = new URL(args[0]);
        URLConnection urlc = a.openConnection();
        is = conn.getInputStream();
        int ret = 0;
        while ((ret = is.read(buf)) > 0) {
          processBuf(buf);
        }
        // close the inputstream
        is.close();
} catch (IOException e) {
        try {
                respCode = ((HttpURLConnection)conn).getResponseCode();
                es = ((HttpURLConnection)conn).getErrorStream();
                int ret = 0;
                // read the response body
                while ((ret = es.read(buf)) > 0) {
                        processBuf(buf);
                }
                // close the errorstream
                es.close();
        } catch(IOException ex) {
                // deal with the exception
        }
}

Mam mniej więcej taki kod wewnątrz metody xxx(). Metodę tą wywołuje setki/tysiące razy. Czy jakoś magicznie działa tu pooling, czy może przy każdym wywołaniu od nowa ustanawiam całe połaczenie (z kodu wynika, że właśnie tak się dzieje), a może java 'jakoś magicznie' dodaje pooling?

0

Na 99% nic takiego się nie dzieje. Korzystamy z HttpClient i tam jest to obsłużone

1

Nie dodaje poolingu. To trzeba samemu obsłużyć, choć jeżeli jest to ten sam adres, to można stworzyć tylko jeden obiekt.

0

(keep-alive & http.maxconnections oczywiscie ustawione na serwerze)

0

but the underlying network connection to the HTTP server may be transparently shared by other instances

Czyli nie w Javie, a gdzieś na urządzeniach/w systemie. Nie można polegać na takim mechanizmie i założyć, że tak będzie działać w każdym przypadku.

0

ok, racja.

"na urzadzeniach/w systemie", tu chodzi o konfiguracje keep/alive i max cnnection w serwerze, czy jeszcze cos?

0

Możesz mieć np. pooling w usłudze VPN (Cisco VPN tak potrafi) i wtedy JVMka nie ma nic do tego. Pooling jest ustawiany per user (urządzenie lub login) i cały ruch na dany adres będzie odpowiednio cachowany. Wyjście z usługi VPN jest wtedy traktowane jako pojedynczy klient. Oczywiście musisz mieć tego obsługę po stronie serwera włączoną, co też jest sprawdzane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1