это практика многоадресной рассылки UDP и эксперименты с DHT на локальном хосте. идея состоит в том, чтобы запустить столько экземпляров этого демона, сколько вы хотите, и все экземпляры найдут друг друга через многоадресную рассылку udp и построят сеть dht. каждый узел сети генерирует пару ключей ed25519 и привязывается к случайному порту. порт — это http-служба, которая принимает запросы на следующих конечных точках:
конечная точка /dht обслуживает запросы RPC веб-сокета
конечная точка /api обслуживает https-запросы на завитки. сейчас единственный реализованный вызов RPC — это «ping».
это все в стадии разработки. больше работы будет добавлено в ближайшее время.
поскольку каждый экземпляр этого выполняется в сети (или на одном и том же компьютере), каждые 5 секунд экземпляр передает UDP-пакет, содержащий вновь сгенерированный открытый ключ, случайный сервисный порт и, следовательно, свой собственный IP-адрес из IP-пакета. каждый раз, когда экземпляр получает многоадресный пакет UDP, он сверяет открытый ключ нового узла с картой. Если это вновь найденный узел, он записывает его в стандартный вывод и добавляет к карте в памяти. сегмент печатается каждые 5 секунд
git clone
этот проект или загрузите здесь: master.zip./build.sh
для сборки докера или просто используйте go build
./demo.sh
, чтобы создать десять экземпляров curl -kvs https://localhost:port/api/ping
^^^ это сообщит узлу выполнить RPC-пинг к трем самым близким узлам в корзине.
некоторые вещи, на которые следует обратить внимание: