P2Pアプリケーションを設計する方法
[ SOユーザー(10k SO +)の提案でここに移動] ピアツーピアアプリケーションを開発したいのですが。私はLOBアプリで多くの経験を積んでいますが、P2Pアリーナは初めてです。 私は物事がどのように機能するかについて大まかな考えを持っていますが、私の理解を記入するためにいくつかの詳細が必要です。 私が知っている(信じる)必要なこと: かなりの割合のクライアントがインバウンド接続を有効にする必要がある(ala uPnP / NATルール) 特定のノードがダウンした場合に回復力を提供するために、ノードは他の既知のノードを共有する必要があります 任意のクライアント間でデータを送信するには、何らかの形式の同期/ルート検索が必要です 「ダム」クライアントとノードリストの同期/共有を処理し、メッセージをリレーするためのより強力な「スーパーノード」を区別するためのリソーススニッフィング インバウンドサポートのないクライアントは、接続するノードの情報を受信できるアウトバウンド接続を開いたままにする必要があります。 つまり、特定の中央サーバーへの接続に依存しないチャット/メッセンジャーサービスを(最初は)提供したいと思っています。物事を始めるには(または大幅なアップグレード後に)集中型の「スーパーノード」をいくつか用意する必要があると思いますが、機能するP2Pネットワークが確立されたら、これらはオプションにする必要があります。 私は多くの問題を見ることができ、それらに対処する方法がわかりません。主にどのように... 中央の権限を確認することなく、ユーザーを他のノードに認証する どのノードが他のどのノードについて知っているかを調整します(最小-最大数/レイテンシ別????) 特定のユーザーが別のユーザー(またはノード)がオンラインかどうかを判断できるようにする ノードの2つのグループが物理的に切断(エアギャップ)されている状況と、グループの再接続時に再同期する方法に対処する など 私はこれがかなり自由回答式の質問であることを知っているので、高レベルの設計パターンは高く評価されますが、私が本当に探しているのは、他の人がこれらの問題を処理する方法に関するまともなガイドです(そして私はまだ検討していません) )。