Лучший способ поддерживать огромное количество соединений в Java - PullRequest
0 голосов
/ 08 августа 2011

Мне интересно, какое решение является лучшим для поддержки огромного количества небольших TCP-соединений в многопоточном приложении без блокировки через некоторое время.

Предположим, что мы должны посещать множество http-сайтов (например, ~ 200 000 на разных доменах, серверах и т. Д.) В многопоточности. Какие классы являются лучшими для создания самого безопасного соединения (я имею в виду большую устойчивость к блокировкам, не многопоточную блокировку, а TCP-соединение, которое «не будет реагировать ни на что»). Будет ли HttpURLConnection & BufferedReader выполнять работу с установленным соединением и временем ожидания чтения? Я видел это, когда использовал простое решение:

URL url = new URL( xurl );
BufferedReader in = new BufferedReader( new InputStreamReader( url.openStream() ) );

Все темы были заблокированы / неактивны через 2-3 часа.

Лучше ли иметь постоянные потоки, такие как 10, работающие все время и запрашивающие URL-адреса для получения из основного потока, или лучше создать один поток для каждого URL-адреса, а затем каким-то образом уничтожить его, если через некоторое время он не ответит? (как убить подпоток?)

1 Ответ

1 голос
/ 08 августа 2011

Ну, если это будет HTTP-соединение, я действительно сомневаюсь, что вы можете их кешировать.Поскольку поддержание живого HTTP-соединения не только на стороне клиента, оно также требует поддержки на стороне сервера.В большинстве случаев сервер закрывает соединение по истечении времени ожидания (которое настраивается на сервере).Итак, проверьте, какое максимальное время ожидания настроено на стороне сервера и как долго вы хотите сохранять соединение в кэше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...