Я изучаю архитектуру p2p с помощью симуляции на одной машине. Для этого мне сказали, что я могу использовать именованные каналы. Я нахожусь в стадии разработки симуляции. Вот как я планирую двигаться вперед:
Создайте одноранговую программу, способную присоединиться к p2p «сети». В сети есть коллекция таких пиров. Пир идентифицируется через идентификатор процесса в машине.
Когда создается одноранговый узел, т. Е. Присоединяется к сети, он объявляет о своем прибытии через самозагрузку себя на «мастер-узел» или трекер. Когда одноранговый узел объявляет о своем прибытии, главный узел обновляет свой список одноранговых узлов (идентификаторы процессов) и возвращает список одноранговых узлов, доступных в сети, новому узлу.
Оказавшись в сети, партнер может теперь загрузить файл из сети или загрузить файл во входящий запрос на файл, который у него есть. Файлы, которые одноранговый узел получает через сеть, автоматически становятся доступными для загрузки.
Для загрузки файла одноранговый узел вызывает алгоритм определения местоположения, который находит одноранговый узел с файлом, который текущий узел пытается загрузить.
Как видите, в моем понимании дизайна есть пробел. Исходя из моего наивного подхода, я вижу № 2 и № 3 как разные шаги. Однако у меня есть ощущение, что они должны как-то быть связаны. Я предполагаю, что моему пониманию не хватает знания того, как работает распределенная хеш-таблица и алгоритм, такой как Chord или CAN. Мне нужна помощь в обобщении этих разбросанных идей, которые помогут мне на самом деле реализовать симуляцию.
Для начала мой первый вопрос: где и как мне запустить алгоритм определения местоположения? Или где распределенная хеш-таблица создается на шагах, перечисленных выше?