アプリケーションのサーバー クライアント アスペクトにどの手法を選択すればよいか悩んでいます。
デザインの定義
- Windows、.net 2 上の C#
- 多くのマシンには .net 2 サービスがあります。私はそれをクライアントと呼んでいます。
- マシンは、インターネットに接続された (または接続されていない) NAT の背後にある異なるネットワークに存在する可能性があります。
- サーバー サービスは公開されています。
要件
- オンデマンドでクライアントと通信するため。
- クライアントは着信接続をリッスンする必要があります。
- サーバーはオンラインであってもオンラインでなくてもかまいません。
- ポート転送はできません。
そのようなことをするための私の選択は何ですか?現在、UDP ホール パンチング テクニックを調べています。UDP ホール パンチング手法のセットアップと私のセットアップの違いは、NAT と仲介サーバーの背後に 2 つのクライアントを配置する代わりに、サーバーと通信する必要がある NAT の背後にあるクライアントのみを取得したことです。それは簡単に違いありませんが、理解して実装するのに苦労しています。私はこの種のNATトラバーサルで正しい道を進んでいますか、それとも実装がはるかに簡単な他の方法でしょうか?
私が考慮した他の方法:
サービスがサーバーがオンラインであることを確認すると、TCP を使用してサーバーへの接続を作成します。問題は、約 200 のクライアントがあり、その数が増加していることです。これがリソース キラーではないかと心配していました。
サービスがサーバーがオンラインであることを確認すると、コマンドのデータベース テーブルをチェックし、30 秒ごとに再度チェックします。これは、サーバーのリソース キラーでもあります。
要するに、UDP ホール パンチング手法がこのシナリオに適している場合は、NAT の背後にあるサービスで実行される UDPServer のコードのアイデアを提供してください。
ありがとうございました。