bep44 の実装に取り組んでいます。定義済みの kademlia アルゴリズムを使用して、与えられたハッシュ ID に最も近い適切なノードを見つけます。
私のプログラムを使用してgo run main.go -put "Hello World!" -kname mykey -salt foobar2 -b public
、100ノード以上に保存された値を取得します(良い)。
ここで、複数回連続して実行すると、put リクエストによって書き込まれた ip のセットがうまく交差しません。
get リクエストを実行しようとすると、クエリされた ips のセットが put セットと交差しないため、値が見つからないという問題があります。
私のテストでは、パブリック dht ブートストラップ ノードを使用します。
"router.utorrent.com:6881",
"router.bittorrent.com:6881",
"dht.transmissionbt.com:6881",
ノードにクエリを実行するとき、最も近い 8 つのノード ( nodes := s.ClosestGoodNodes(8, msg.InfoHash())
) を選択します。これは通常、再帰的なトラバーサルの後、約 1K のクエリのリストになります。
私の理解では、情報ハッシュのアドレスを dht テーブルに格納することは、テーブルのステータスを考えると決定論的です。連続したクエリを実行しているため、テーブルが実際に変更されることを期待していますが、それほどではありません。
ストア ノード セットが交差しないのはなぜですか?