Mainline DHT является реализацией kademlia, подробнее см. документ .
Из 8 полученных вами узлов отсортируйте их по близости их идентификатора узла к вашему собственному идентификатору, затемотправьте find_node
на 3 лучших (3 ближайших к вам).Затем вы получите еще 8 х 3 узла, вставьте их в свой список узлов, все еще упорядочив их по тому, насколько близко узлы находятся к вам.Продолжайте отправлять find_node
сообщений на 3 верхних узла (игнорируя те, на которые вы уже отправили сообщения), пока вернувшиеся узлы уже не появятся в вашем списке.то есть условие завершения - вы отправили сообщение всем 8 ближайшим к вам узлам (вверху списка).
Как поясняется в статье, метрика расстояния - XOR.Чтобы вычислить, как далеко ваш идентификатор узла находится от другого узла, вы XOR идентификаторы узла.Чем ниже результат, тем ближе узлы друг к другу.
В реальной жизни вы можете захотеть сделать это немного сложнее, сохраняя 3 невыполненных запроса в любой момент времени и временно открывая более невыполненныезапрашивает половину тайм-аута.