シミュ2

P2Pは、実IPネットワークでやるよりもシミュレータを作ってプログラミングゲーム的に遊んでいたほうが面白いんじゃないかとか思ってきています。完全なる闇です。
ということで、今日からJavaで作り始めました。以前にDWTで作ろうとしていたものを再現させるようなコードから書いています。完成したら改良しつつその上に検索などいろいろとテストコードをのせていきます。DWT版は、軽くD恐怖症になったのと、勢いで作ったお試しプログラミングなので、という理由で捨てます。
で、このDWT版をある程度参考に作ろうとコードを見ていて思い出したのですが、以前グラフを円形に描画したいけれど端をつなげるとうまく円にならないとか言っていたのが、その後うまいこと円形になるように作っていて、しかも性能改善されてて、がんばれば10000ノードくらいならぎりぎり動くようになっていたので(その前は1000で限界だった)最後ソースごと公開します。exeなんて誰も見てくれないかもしれないですが、ちょっと(自称)Winnyからヒントを得たこの再構築の速さと頑丈さを見て欲しい。
"sim2.zip"
1000ノード

10000ノード(『シミュ』ではなく『シュミ(趣味)』になっているのはもちろんわざとです(嘘です))

今のところ、噂に聞くDHTなんかと比べるとかなりおおさっぱな構造だし、縦方向(円周方向)の分割数が固定されているので、ノード数が増えてくると整列されていない横方向に伸びてしまうのですが、一定の数までならそれが骨組みのミラー的な働きをしているので、Winnyのような使い方をされて激しくノードが減ったり増えても全体が崩れることがないようになっています。今後はさらに横方向でも同じような方法でソートし、さらに3次元、4次元と再起的構造で増やしていくといくらでも分割できるのでノードがいくら増えても大丈夫だせ、みたいな感じにしようと思っています。次元とかいう分かりにくいですが、ようは『桁』です。1桁目でソートして、2桁目でソートして……と、また桁数を動的に変えると、ノードによって保持している桁数が違ってくるのですが、2桁しか持っていないノードと5桁持っているノードが出会うと、とりあえず先頭2桁でソートするようにすると、そこそこの位置に配置できるだろうとか思っています。5桁同士なら5桁分ソートという感じ。あとは、そのうえのにパケット型の検索プロトコルを載せれば、そこそこの検索が可能な構造ができるはずだとか、、ゆめがひろがりんぐ。


実用性を求めるものとは別で作ろうと思います。こういう役に立ちそうにないけど、挑戦できるプログラミングはやっぱ面白い。