от
Я пытаюсь сделать клиент BitTorrent только в учебных целях. Сначала я расскажу, что я сделал до сих пор. Я создал пул, размер которого является число доступных процессоров. Теперь каждый торрент-файл выполняется в отдельном потоке. Я вам список URL трекера с каждого торрент-файл и использовать Java NIO, чтобы отправлять запросы на подключение. Я предполагаю, что я отправить все запросы на подключение примерно в то же время, потому что я просто зацикливание списка URL-адресов и отправки запросов. Поэтому вместо сохранения времени ожидания для каждого URL-адреса, я начинаю таймер, когда первый запрос отправляется. Когда таймер времени ожидания, я повторно подключите просьба ко всем URL, которые не отвечали. (Здесь, для таймер, рассчитать
interval
и отслеживать время начала
startTime
. Я петлю, пока
currentTimeMillis()
превышает
startTime interval
. Внутри цикла я использую
selector.select()
, чтобы выбрать
channels
, что готовы. Когда цикл завершается, я повторно подключите просьба ко всем каналам, которые не отвечают. Я не использовал
Timer
и
ScheduledExecutorService
потому что я думал, что это может привести количество потоков, чтобы взорваться. Я уже использую один поток на файл. Поправьте меня об этом и предлагать более рациональные подходы). Основная проблема возникает при отправке объявить запросы. Я мог получить подключение ответ в любой момент времени, в какой момент я должна отправить объявляет запрос и запустить таймер, и отправить запрос, если время ожидания. В настоящее время для каждого подключения ответ, я представить задачу
Runnable
в пул потоков, который обрабатывает отправку объявляет запрос. Поэтому я использую один поток для каждого объявить цикле запрос-ответ. Так что если у меня есть много торрент файлов и каждый файл имеет как минимум 5 адресов, трекер, это не создаст проблемы с производительностью? Что является лучшим способом, чтобы заставить эту штуку работать? Было бы очень поучительно, если кто-то может пролить свет на то, как торрент-клиенты работать с таким количеством файлов и так много циклов запросу ответ одновременно.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...