Можно ли вообще опросить, скажем, 10 000 URL-адресов каждую секунду ? Я всегда помню о потоках с помощью следующего кода:
for (int i = 0; i < 10000; i++) {
Executors.newScheduledThreadPool(10).scheduleWithFixedDelay(new Runnable() {
@Override public void run() {
// Poll URL here
}
}, i, 1000, TimeUnit.MILLISECONDS);
}
Я открываю соединение с URL-адресом таким образом (я закрываю его позже, после прочтения):
HttpURLConnection connection = (HttpURLConnection) new URL("https://stackoverflow.com").openConnection();
connection.connect();
Затем я читаю данные выходного потока:
InputStream inputStream = connection.getInputStream();
Затем я читаю входной поток и закрываю HttpURLConnection.
При опросе 200 URL каждую секунду все работает нормально. При опросе 400+ урлов все задыхается. Подключение к URL занимает 20-30 секунд.
Я тестирую его на Tomcat с Eclipse на моем собственном компьютере (не на сервере). Когда на установление соединений уходит много времени, я даже не могу открывать веб-страницы в браузере. Сценарий использует около 20-30 Мбит / с, в то время как мой Интернет на компьютере имеет максимум 90 Мбит / с.
Если у вас есть предложения, я бы очень хотел их услышать и попробовать.
Запрос с использованием HEAD может уменьшить объем данных, которые отправляются обратно, что позволяет использовать меньшую полосу пропускания и ускорять запросы.