P2Pのページ。
ここはオレオレP2Pネットワークの実験ページです。
JavaScript上の仮想ネットワーク環境でP2Pノードを動かしつつかっこいい感じにします。
実際に運用する気はなくて、ちょっとしたゲームみたいな感じでダラダラやりたい。
現在のルール
- ノードは0.0〜1.0のランダムな2つの実数を特徴量(ノードID)として起動する(ノードの色はこれを表している)。また各ノードは最大100件保存できるノードDBを持っている。
- 起動時には、初期ノード情報としてネットワーク内のランダムな2ノードをノードDBへ追加する。
- 各ノードは、最大3つの能動的な接続行う。このときノードDBの中から自ノードと特徴量の距離が近く自ノードより特徴空間の中心に近いノードを選択して接続する。
- 各ノードは接続を最大4つまで受け付ける。
- 接続を受けたノードは、自分の持っているノードDBの中から接続相手にオススメのノード情報を20個送信する。また接続を維持している間、定期的にオススメノード情報を交換する。
- オススメされたノード情報はノードDBに保存する。ノードDBがいっぱいの場合は接続優先度が低いほうから削除する。
- 各接続はある程度時間がたつと切断する。基本的には特徴量の距離が遠いノードほど速く切断され、近いノードは長く繋がっているようにする。これをうまくやるためにはネットワークの全体量を予測する必要があるが、そこまではやっていない。テキトー
-
各ノードはたまにノードDBのノードが死んでいないかランダムに選択して確認し、死んでいた場合はDBから削除する。
動きとしては、オススメノード+自動切断+優先度による接続を繰り返しているとだんだんと特徴量が近いノード同士が中心に向かって接続するようになって、その結果としてネットワーク全体がソートされる。ソートされていればあとはどうにかなる。各ノードが持っているルールには自分と隣接ノードの関係しか含まれていないため壊れにくい。
Winnyをベースに回線速度+クラスタリングキーワード=多次元ノードIDとしてまとめた感じ。
履歴
2013年7月27日: JavaScriptのsort関数が非人道的な破壊的関数であることを忘れていたバグによりノードの接続優先度が破壊されるバグを修正したところちゃんと動くようになった。動くようになったあといろいろ気になるところがあったので変えた。
2009年頃: 一時のテンションに身を任せ2日で作った。どうもノードが減ったときの修復がうまくいっていないようだ。