Mantenga la comunicación entre dos clientes incluso si cambian sus direcciones IP
Estoy tratando de averiguar si es posible tener algo como este escenario:
Digamos que tenemos dos personas, Alice y Bob. Alice quiere enviar algunos datos (no importa cuáles sean estos datos) a Bob, y viceversa. Sé que WebRTC se puede usar para intercambiar mensajes sin servidor, pero eso requiere que Alice y Bob conozcan las direcciones IP de cada uno. Ahora, es relativamente fácil para Alice y Bob compartir sus direcciones IP una vez, para inicializar una conexión, pero ¿qué sucede si uno de ellos se conecta a una red diferente? ¿Quizás Bob está en una cafetería, por ejemplo, y su dirección IP es diferente? La conexión inicializada anteriormente no sería a su dirección IP actual, por lo que tendrían que reinicializar la conexión; ¿pero cómo?
Me parecería que ya debería haber algún tipo de comunicación preexistente entre los dos para que pudieran compartir sus direcciones IP, pero entonces, ¿por qué no simplemente comunicarse a través del método en el que comunican sus direcciones IP? Alternativamente, podría haber un servidor que conecta los dos, pero que derrota a la parte sin servidor del sistema.
Entonces, ¿hay alguna forma de mantener la comunicación entre dos clientes incluso si cambian de red y, por lo tanto, de direcciones IP? Tal vez haya un método más fijo para identificar dispositivos que sus direcciones IP, como he visto en esta respuesta SO , pero tiene años, así que tal vez haya algo nuevo. Estaría implementando esto en JS, en múltiples dispositivos / sistemas operativos, por lo que esa respuesta probablemente no funcionaría. Cualquier idea / ejemplo será muy apreciado; Principalmente quiero saber si esto es posible y, de ser así, cómo.
Respuestas
Sí, es posible.
Debe usar FQDN
(o un subdominio) en lugar de IP Address
un DNS
servidor, y una utilidad o herramienta del lado del cliente para actualizar el registro DNS mientras cambia la dirección IP.
Hay soluciones gratuitas en la web como no-ip.com
, cloud-flare
etc.
Respuesta simple
No, si bien esto es posible, no es realista y no es necesario. Vea mi explicación más larga a continuación. Además, si realmente desea hacer esto, aunque es posible a través de QUIC , es probable que no sea necesario (como se explica a continuación).
Respuesta / pregunta más larga para pensar
En resumen, esta no es una característica necesaria de WebRTC. Déjame hacerte una pregunta:
Alice y Bob están en un canal de datos, intercambiando mensajes de chat a través de WebRTC. Para crear una conexión WebRTC, debe utilizar un servidor de hielo ( primer enlace , segundo enlace ) para que Alice y Bob, para citar Wikipedia:
... para encontrar formas para que las dos computadoras se comuniquen entre sí de la manera más directa posible ..
Esto significa que utilizará la dirección IP actual de Alice para hacerle una oferta a Bob a través de un servidor STUN o TURN. Si, como dijiste, Alice cambiara las direcciones IP, tendría que cambiar de ubicación. Eso significa que deberá moverse una distancia suficiente para que cambie la dirección IP. En la práctica, esto probablemente significa que ella va en un automóvil y conduce a algún lugar. Si no, llama a un Uber o un taxi o monta en bicicleta. En la mayoría de estos escenarios, deberá cerrar su computadora, por lo tanto, finalizará la conexión p2p. Si, por alguna extraña hechicería, no cierra su computadora / la conexión, es muy probable que el navegador se actualice, por lo tanto, se volverá a conectar al canal de datos WebRTC desde la nueva dirección IP . ¿Cuándo necesitará crear un canal de datos WebRTC y manejar los cambios de IP? Una larga explicación llegando a una conclusión, los clientes que cambian las direcciones IP sin finalizar / restablecer la conexión simplemente no sucede en la práctica.
Si desea buscar otras alternativas, aquí hay algunos ejemplos:
ALTERNATIVAS
Agregar un detector de eventos de IP ★
Ahora bien, esta no es una variable global real que puede verificar, pero puede usar una API en línea (algunas se enumeran aquí ) para verificar la dirección IP del usuario, almacenarla en una variable (o localStorage) y verificar si la IP cambia . En un bucle, haría una simple lógica para verificar. Si lo hace, restablece la conexión WebRTC, si no, mantiene el bucle en marcha.
Usando un servidor de "tubería"
Puede configurar un chat simple utilizando un servidor http / https, ya configurado, que se explica aquí , llamado servidor de tuberías. Puede consultar el artículo para obtener más información, pero promueve un sistema de chat sin servidor (se puede usar sin crear un servidor) que no está expuesto a las dificultades de cambiar las direcciones IP. Sin embargo, necesita conocer la identificación del compañero y ellos necesitan conocer su identificación, lo que efectivamente hace que la solución sea obsoleta porque necesita tener algún tipo de comunicación antes de establecer este simple chat.
Usando Node.js, Websockets y / o Socket.io ★
Si desea crear una aplicación de chat simple o crear un canal de datos, Node.js y Socket.io es el camino a seguir. Esto es súper simple, sin embargo, se trata de un servidor, por eso lo dejé para el final. Sin embargo, lo recomiendo encarecidamente por su facilidad y simplicidad, y no depende de las direcciones IP. Vea aquí una muy buena inmersión inicial en Node.js y el marco Express. Estoy lejos de ser un experto en Websockets, pero MDN siempre es un buen lugar para comenzar. Por muy buenos que sean los Websockets, creo que Socket.io es mucho más fácil para los principiantes, así que si estás dispuesto a sacrificar un poco de velocidad por simplicidad, deberías empezar aquí . Todos estos son buenos puntos de partida de chat del lado del servidor.
Enlaces
Respuesta simple
Migración de conexión QUIC
Oyente de IP
SO pregunta ,
Servidores de hielo
Documentos de MDN , Wikipedia
Servidor de tuberías
Artículo simple , repositorio de Github
Node.js, Websockets y Socket.io
Configuración de Node.js y Express , introducción de Websocket e introducción de Socket.io
Todas las alternativas que están marcadas con estrellas (★) se recomiendan personalmente.