作業履歴

とりあえずリバースリンクは問題なく動作。
副次的にコネクションの管理を行うConnectionGCとやらを作成。(まぁ、ただのプールだが)
とはいえ、一番難しいのは「いつリバースリンクを作成するか」ということ。
AからBへの接続はできるけれど、BからAへの接続ができないとき、
それを判別できるのはBなんだよね。
AがBへ接続したタイミングでBからAに通知してやるっていう手もあるけど、
そもそも接続できないのはAの問題なんだからAがどうにかすべきであって、
Bがいちいち面倒見てあげるのはお門違いな気がする。


ということで、AがBに対して「俺に向かって接続してちょ」っていうメッセージを送信、
Bからの返信がタイムアウトすれば無理だったってことで、リバースリンクを作成する、っていう流れが一番自然で楽だと思う。
どうせルーティングテーブル内のノードが生きているかどうかの確認をする必要はあるわけだし。(Kademlia的にアップデートするのなら別か)


これでNATとファイアウォール抜けが同時にできるかな。
後は相互通信のための中継機能を付ければ(性能はさておき)大半の環境下でP2Pに参加できるようになるはず。