IPアドレスが変更されても、2つのクライアント間の通信を維持します

Dec 11 2020

私はこのシナリオのようなものを持つことが可能かどうかを理解しようとしています:

アリスとボブの2人がいるとしましょう。アリスはいくつかのデータ(このデータが何であるかは関係ありません)をボブに送信したいと考えています。その逆も同様です。WebRTCを使用してサーバーレスでメッセージを交換できることは知っていますが、そのためには、アリスとボブが互いのIPアドレスを知っている必要があります。現在、アリスとボブがIPアドレスを一度共有して接続を初期化するのは比較的簡単ですが、一方が別のネットワークに接続した場合はどうなりますか。たとえば、ボブは喫茶店にいて、IPアドレスが違うのではないでしょうか。以前に初期化された接続は彼の現在のIPアドレスではないため、接続を再初期化する必要があります。しかし、どのように?

彼らがIPアドレスを共有できるようにするには、2人の間に何らかの既存の通信がすでに必要であるように思われますが、代わりにIPアドレスを通信する方法で通信しないのはなぜですか?あるいは、2つを接続するサーバーが存在する可能性がありますが、それはシステムのサーバーレス部分を無効にします。

では、2つのクライアントがネットワーク、つまりIPアドレスを変更した場合でも、2つのクライアント間の通信を維持する方法はありますか?このSOの回答で見たように、IPアドレスよりもデバイスを識別するためのより固定された方法があるかもしれませんが、それは古いので、何か新しいものがあるのでしょうか?私はこれをJSで、複数のデバイス/ OSに実装するので、答えはおそらく機能しません。任意のアイデア/例をいただければ幸いです。私は主にこれが可能かどうか、もしそうなら、どのように可能かを知りたいです。

回答

2 cybercoder Dec 15 2020 at 00:38

はい、可能です。

IPアドレスの変更中にDNSレコードを更新するFQDNにはIP AddressDNSサーバーとクライアント側のユーティリティまたはツールの代わりに(またはサブドメイン)を使用する必要があります。

、などのような無料のソリューションがWeb上no-ip.comcloud-flareあります。

4 divinelemon Dec 15 2020 at 06:05

簡単な答え

いいえ、これは可能ですが、非現実的であり、必要ありません。以下の私のより長い説明を参照してください。また、本当にこれを実行したい場合、QUICを使用して実行できますが、必要になる可能性はほとんどありません(以下で説明します)。

考えるより長い回答/質問

要するに、これはWebRTCの必須機能ではありません。質問させてください。
アリスとボブはデータチャネルにいて、WebRTCを介してチャットメッセージを交換しています。WebRTC接続を作成するには、アイスサーバー(最初のリンク、2番目のリンク)を使用して、アリスとボブの両方にアクセスし、ウィキペディアを引用する必要があります。

... 2台のコンピュータが可能な限り直接相互に通信する方法を見つけるため。

これは、アリスの現在のIPアドレスを使用して、STUNまたはTURNサーバーを介してボブにオファーを行うことを意味します。あなたが言ったように、アリスがIPアドレスを変更する場合、彼女は場所を変更する必要があります。つまり、IPアドレスが変更されるように、彼女は十分な距離を移動する必要があります。実際には、これはおそらく彼女が車に乗ってどこかを運転することを意味します。そうでない場合、彼女はUberまたはタクシーに電話するか、自転車に乗ります。これらのシナリオのほとんどでは、彼女は自分のコンピューターを閉じる必要があるため、p2p接続を終了します。奇妙な魔法によって、彼女がコンピューター/接続を閉じない場合、ブラウザーは更新される可能性が非常に高いため、新しいIPアドレスからWebRTCデータチャネルに再接続しますWebRTCデータチャネルを作成してIPの変更を処理する必要があるのはいつですか?長い説明が結論に達しましたが、接続を終了/リセットせずにIPアドレスを変更するクライアントは、実際には発生しません。

他の選択肢を検討したい場合は、いくつかの例を示します。

代替案

IPイベントリスナーの追加★

これは確認できる実際のグローバル変数ではありません、オンラインAPI(一部はここにリストされています)を使用してユーザーのIPアドレスを確認し、変数(またはlocalStorage)に格納して、IPが変更されるかどうかを確認できます。 。ループでは、いくつかの簡単なロジックを実行して、チェックする場合はWebRTC接続をリセットし、そうでない場合はループを続行します。

「配管」サーバーの使用

パイピングサーバーと呼ばれる、ここで説明されている、すでにセットアップされているhttp / httpsサーバーを使用して、簡単なチャットをセットアップできます。詳細については記事を参照してくださいが、IPアドレスの変更の難しさにさらされないサーバーレスチャットシステム(サーバーを作成せずに使用できます)を促進します。ただし、ピアのIDを知っている必要があり、ピアはIDを知っている必要があります。これにより、この単純なチャットを確立する前に何らかの通信が必要になるため、ソリューションは事実上時代遅れになります。

Node.js、Websocket、Socket.ioの使用★

簡単なチャットアプリを作成したり、データチャネルを作成したりする場合は、Node.jsとSocket.ioが最適です。これは非常に単純ですが、サーバーが関係しているため、最後に残しました。ただし、簡単でシンプルにするためにこれを強くお勧めします。IPアドレスに依存していません。Node.jsとExpressフレームワークへの非常に優れた開始点については、ここを参照してください。私はWebsocketsの専門家からはほど遠いですが、MDNは常に開始するのに適した場所です。どんなに優れたWebsocketであっても、Socket.ioは初心者にとってはるかに簡単だと思います。したがって、単純さよりも速度を少し犠牲にしても構わないと思っている場合は、ここから始めてください。これらはすべて、サーバー側のチャットの開始点として適しています。

リンク

簡単な答え

QUIC接続の移行

IPリスナー

SO質問、

アイスサーバー

MDN docs、Wikipedia

配管サーバー

簡単な記事、Githubリポジトリ

Node.js、Websockets、およびSocket.io

Node.jsとExpressのセットアップ、Websocketのイントロ、Socket.ioのイントロ

スター付き(★)のすべての選択肢は、個人的に推奨されます。