Maintenir la communication entre deux clients même si leurs adresses IP changent
J'essaie de comprendre s'il est possible d'avoir quelque chose comme ce scénario:
Disons que nous avons deux personnes, Alice et Bob. Alice veut envoyer des données (peu importe ce que ces données sont) à Bob, et vice versa. Je sais que WebRTC peut être utilisé pour échanger des messages sans serveur, mais cela nécessite qu'Alice et Bob connaissent les adresses IP de l'autre. Maintenant, il est relativement facile pour Alice et Bob de partager leurs adresses IP une fois, pour initialiser une connexion, mais que se passe-t-il si l'un d'entre eux se connecte à un autre réseau; peut-être que Bob est dans un café, par exemple, et que son adresse IP est donc différente? La connexion précédemment initialisée ne serait pas à son adresse IP actuelle, ils devraient donc réinitialiser la connexion; mais comment?
Il me semble qu'il faudrait déjà une sorte de communication préexistante entre les deux pour qu'ils puissent partager leurs adresses IP, mais alors pourquoi ne pas simplement communiquer par la méthode par laquelle ils communiquent leurs adresses IP à la place? Alternativement, il pourrait y avoir un serveur qui connecte les deux, mais qui vainc la partie sans serveur du système.
Alors, y a-t-il un moyen de maintenir la communication entre deux clients même s'ils changent de réseau, et donc d'adresses IP? Il existe peut-être une méthode d'identification des périphériques plus fixe que leurs adresses IP, comme je l'ai vu dans cette réponse SO , mais elle a des années, alors peut-être qu'il y a quelque chose de nouveau? Je mettrais en œuvre cela dans JS, sur plusieurs appareils / systèmes d'exploitation, de sorte que cette réponse ne fonctionnerait probablement pas. Toutes les idées / exemples seraient grandement appréciés; Je veux surtout savoir si cela est même possible et, si oui, comment.
Réponses
Oui c'est possible.
Vous devez utiliser FQDN
(ou un sous-domaine) au lieu de IP Address
et un DNS
serveur, et un utilitaire ou un outil côté client pour mettre à jour l'enregistrement DNS lors du changement d'adresse IP.
Il existe des solutions gratuites sur le Web comme no-ip.com
, cloud-flare
etc.
Réponse simple
Non, bien que cela soit possible, c'est irréaliste et inutile. Voir mon explication plus longue ci-dessous. De plus, si vous voulez vraiment faire cela, bien que cela soit possible via QUIC , cela ne sera probablement pas nécessaire (comme expliqué ci-dessous).
Réponse / question plus longue à réfléchir
En bref, ce n'est pas une fonctionnalité nécessaire de WebRTC. Permettez-moi de vous poser une question:
Alice et Bob sont dans un canal de données, échangeant des messages de discussion via WebRTC. Pour créer une connexion WebRTC, vous devez utiliser un serveur ice ( premier lien , deuxième lien ) pour obtenir à la fois Alice et Bob, pour citer Wikipedia:
... pour trouver des moyens pour que les deux ordinateurs se parlent aussi directement que possible.
Cela signifie qu'il utilisera l'adresse IP actuelle d'Alice pour faire une offre à Bob via un serveur STUN ou TURN. Si, comme vous l'avez dit, Alice devait changer d'adresse IP, elle aurait besoin de changer d'emplacement. Cela signifie qu'elle devra se déplacer sur une distance suffisante pour que l'adresse IP change. En pratique, cela signifie probablement qu'elle va dans une voiture et conduit quelque part. Sinon, elle appelle un Uber ou un taxi ou fait du vélo. Dans la plupart de ces scénarios, elle devra fermer son ordinateur, mettant ainsi fin à la connexion p2p. Si, par une magie étrange, elle ne ferme pas son ordinateur / la connexion, le navigateur s'actualisera très probablement, d'où la reconnexion au canal de données WebRTC à partir de la nouvelle adresse IP . Quand aurez-vous besoin de créer un canal de données WebRTC et de gérer les changements d'adresse IP? Longue explication pour arriver à une conclusion, les clients changeant d'adresse IP sans terminer / réinitialiser la connexion ne se produisent tout simplement pas dans la pratique.
Si vous souhaitez examiner d'autres alternatives, voici quelques exemples:
ALTERNATIVES
Ajout d'un écouteur d'événements IP ★
Maintenant, ce n'est pas une variable globale réelle que vous pouvez vérifier, mais vous pouvez utiliser une API en ligne (certaines sont répertoriées ici ) pour vérifier l'adresse IP de l'utilisateur, la stocker dans une variable (ou localStorage) et vérifier si l'IP change . Dans une boucle, vous feriez une logique simple pour vérifier Si c'est le cas, vous réinitialisez la connexion WebRTC, sinon, vous continuez la boucle.
Utilisation d'un serveur «piping»
Vous pouvez configurer une discussion simple en utilisant un serveur http / https, déjà configuré, expliqué ici , appelé serveur de tuyauterie. Vous pouvez consulter l'article pour plus d'informations, mais il favorise un système de chat sans serveur (peut être utilisé sans créer de serveur) qui n'est pas exposé aux difficultés de changement d'adresses IP. Cependant, vous devez connaître l'ID du pair et il doit connaître votre ID, ce qui rend la solution obsolète car vous devez avoir une sorte de communication avant d'établir ce simple chat.
Utilisation de Node.js, Websockets et / ou Socket.io ★
Si vous souhaitez créer une application de chat simple ou créer un canal de données, Node.js et Socket.io sont la solution. C'est super simple, cependant, cela implique un serveur, c'est pourquoi je l'ai laissé pour la fin. Cependant, je le recommande vivement pour la facilité et la simplicité, et ne dépend pas des adresses IP. Voir ici pour une très bonne immersion de départ dans Node.js et le framework Express. Je suis loin d'être un expert de Websockets, mais MDN est toujours un bon point de départ. Aussi bons que soient les Websockets, je pense que Socket.io est beaucoup plus facile pour les débutants, donc si vous êtes prêt à sacrifier un peu de vitesse sur la simplicité, vous devriez commencer ici . Ce sont tous de bons points de départ pour les discussions côté serveur.
Liens
Réponse simple
Migration de connexion QUIC
Écouteur IP
Question SO ,
Serveurs de glace
Documents MDN , Wikipédia
Serveur de tuyauterie
Article simple , dépôt Github
Node.js, Websockets et Socket.io
Configuration Node.js et Express , introduction Websocket et introduction Socket.io
Toutes les alternatives marquées d'une étoile (★) sont personnellement recommandées.