Szybsze działanie UrlConnection i InputStream

0

Chcę wykonać sporą(10000+) ilość zapytań podając adres url i działa to dość wolno. Działa to tak, że otwieram połączenie i pobieram strumień wejściowy i potem robię coś sobie z tymi danymi. Wykonuje się 10 zapytań w 15 sekund jak patrzyłem i to chyba nie zależy od parametrów kompa a tylko od javy. Jest jakiś lepszy i szybszy sposób by pobierać dane z konkretnego urla w dużych ilościach?
Obecnie w taki sposób działam:

 URL url = new URL(endpoint);
            URLConnection urlConnection = url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
0

A co konkretnie pobierasz?

to chyba nie zależy od parametrów kompa a tylko od javy

Nie. Komunikacja sieciowa zależy od wielu rzeczy, np.od szybkości łącza, wielkości pakietów itp. itd.

0

Czytanie jest wolne, bo tak to napisałeś, a szczegółnie w kolejnych linijkach, których nie przedstawiłeś. (nie wiem, ale tak strzelam :-)). Przedstaw je.

Napisz jakiego rozdaju to dane (jakie wielkości plików czytasz, czy to tekst, itp), czy można czytać równologle, czy trzeba po kolei, ile równocześnie połączeń serwer przyjmie od Ciebie (http formalnie ogranicza). Czy gzip i deflate jest wspierane. Wtedy może uda siedobrać szybszego klienta http.

0

Odczytuję całą zawartość strony i potem szukam czy nie zawiera pewnych słów kluczowych. Odczytuję w taki sposób:

        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while((line = bufferedReader.readLine()) != null){
            stringBuilder.append(line);
        }

Choć jak debugowałem to samo odczytywanie nie jest jakieś strasznie długie, najdłużej schodzi na pobranie strumienia wejściowego:

 InputStream inputStream = urlConnection.getInputStream();
0

Skoro obranie strumienia trwa najdłużej, to może ogranicza Cię przepustowość łącza? Jak duże dane znajdują się pod adresem, z którego pobierasz?

0
  1. Nawiązanie połączenia http trochę jednak trwa
  2. Może nie ma sensu czytać po linii, tylko wczytać wszystko na raz?
  3. Rozumiem że chcesz to robić dla wielu różnych URLi? Wtedy możesz to mocno zrównoleglić, praktycznym ograniczeniem będzie ile połączeń pozwoli ci nawiązać dany serwer, ale spokojnie możesz liczyć na kilkadziesiąt razy szybsze wykonanie.
0

Nawiązywabie połączenia http trochę trwa. Prawda. Może rozwiązaniem jest go nie nawiązywać. A dokładniej: nie tak często.
https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

0

Ciągle operuje na jednej stronie gdzie różni się jedynie część adresu np:
www.4programmers.net/Java
www.4programmers.net/C
www.4programmers.net/Php
itp.

Pobieram źródło strony w poszukiwania słów kluczowych i taka strona zawiera od 50000 do 100000 znaków. Nie wiem czy to dużo czy mało w tym kontekście.

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