私は、A がクライアントであり、NAT の背後にある可能性があるサーバーである B からコンテンツを要求しようとしているハイブリッド アーキテクチャを使用しています (必ずしもそうとは限りません)。S は、A と B が次の方法でホール パンチングを使用するための仲介者として機能するサーバーです。
A は S に連絡し、B から何かを取得したいと言います。S は A B の最後の既知の IP アドレスとポートを伝え、A は B に連絡しようとし始めます。同時に、S は B A の IP アドレスとポートを伝え、B Aに連絡を取り始めます。
S は中継サーバーとして機能しません。互いに接続した後、すべての通信は A と B の間の直接接続で行われます。直接接続できない場合、接続は失敗します。UDPとTCPの両方でこの問題があります。
私の質問は、任意の数の As がいつでも B に接続できるように、S を B の IP アドレスとポートで最新の状態に保つための最も効率的な方法は何かということです。また、Bが背後にあるNATがポートをいじった場合(ポートを1ずつ増やすなど)、実際にポートが何であるかを「推測」できるようにするソリューションが必要です。は。
私が考えた解決策(ただし、完全に満足しているわけではありません):
X 秒ごとに B から S に要求を送信して、B の IP アドレスとポートで S を更新します。これに関する私の問題は、X が高すぎる場合、S は B の適切な情報を取得できず、低すぎる場合、B と S の両方にオーバーヘッドがかかることです。これが最終的な答えになると思われます。トリックは X の適切な値を見つけることです。