インターネット経由で複数の「クライアント」アプリケーションに接続された1つのデスクトップアプリケーション(「ホスト」と呼びます)で構成されるC#でシステムを作成しています。「ホスト」は、クライアント コンピューターにファイルを送信するだけでなく、ステータス情報 (少なくともクライアント アプリケーションが実行されているかどうか) を取得できる必要があります。クライアント コンピュータは、相互に認識したり通信したりする必要はありません。クライアント アプリケーションは 24 時間年中無休で実行されますが、ホスト アプリケーションは、ユーザーがクライアント アプリケーションを実行している PC を確認したい場合にのみ実行されます。
私はマイクロソフトの PNRP をかなり読んだことがありますが、これに基づいたシステムを使用して、ホストとクライアント間の接続を緩和すると考えています。つまり、各クライアント アプリケーションは WAN IP の変更を検出し、その新しい IP を Linux に報告します。私が持っているサーバー。ホスト アプリケーションが接続を希望する場合、サーバーに接続し、認証し、クライアント アプリケーションの WAN IP のリストを取得します。
ここからはホストアプリから各クライアントアプリに直接接続したいと思います。サーバーの負荷を軽減するために、サーバー経由でファイルやステータス情報を送信したくありません。これを行う最良の方法は何ですか?各クライアント アプリケーションはファイアウォールや NAT などの背後にある可能性があり、手動でポート転送することはできません (ただし、機能する場合は uPnP を使用できます)。
PS - 提案する PNRP の代替案はありますか? (1) セキュリティ上の理由から、Microsoft PNRP シード サーバーの代わりに独自のシード サーバー (Linux) を使用する必要があり、PNRP は Windows のみであり、(2) PNRP は Windows のみで動作することを理解しています。ネットワーク (および ISP) が常にサポートするとは限らない ipv6。