IP 주소가 변경 되더라도 두 클라이언트 간의 통신 유지
이 시나리오와 같은 것을 가질 수 있는지 알아 내려고 노력하고 있습니다.
Alice와 Bob이라는 두 사람이 있다고 가정 해 보겠습니다. Alice는 일부 데이터 (이 데이터가 무엇인지는 중요하지 않음)를 Bob에게 보내고 그 반대도 마찬가지입니다. WebRTC 를 사용하여 서버를 사용하지 않고 메시지를 교환 할 수 있다는 것을 알고 있지만이를 위해서는 Alice와 Bob이 서로의 IP 주소를 알아야합니다. 이제 Alice와 Bob이 자신의 IP 주소를 한 번 공유하여 연결을 초기화하는 것은 비교적 쉽습니다.하지만 둘 중 하나가 다른 네트워크에 연결되면 어떻게됩니까? 예를 들어 Bob이 커피 숍에 있는데 그의 IP 주소가 다를까요? 이전에 초기화 된 연결은 현재 IP 주소가 아니므로 연결을 다시 초기화해야합니다. 하지만 어떻게?
두 사람 사이에 이미 어떤 종류의 기존 통신이 있어야 IP 주소를 공유 할 수있을 것 같지만, 대신 IP 주소를 통신하는 방법을 통해 통신하지 않는 이유는 무엇입니까? 또는 두 서버를 연결하지만 시스템의 서버리스 부분을 무력화하는 서버가있을 수 있습니다.
그렇다면 두 클라이언트가 네트워크, 즉 IP 주소를 변경하더라도 두 클라이언트 간의 통신을 유지할 수있는 방법이 있습니까? 아마도이 SO 답변 에서 본 것처럼 IP 주소보다 장치를 식별하는 고정 된 방법이있을 수 있지만, 오래되었으므로 새로운 것이있을 수 있습니까? 여러 장치 / OS에서 JS로 구현할 것이므로 대답이 작동하지 않을 것입니다. 모든 아이디어 / 예는 대단히 감사하겠습니다. 나는 이것이 가능한지, 가능하다면 어떻게 하는지를 주로 알고 싶다.
답변
예, 가능합니다.
당신은 사용할 필요가 FQDN
(또는 하위 도메인) 대신 IP Address
과 DNS
서버 및 업데이트 DNS 레코드에 클라이언트 폴더의 유틸리티 측 또는 도구는 IP 주소 변경하면서.
웹 no-ip.com
에는 cloud-flare
, 등과 같은 무료 솔루션이 있습니다 .
간단한 대답
아니요, 가능하지만 비현실적이며 필요하지 않습니다. 아래의 더 긴 설명을 참조하십시오. 당신이 정말로 그것을이 있지만,이 작업을 수행 할 경우에도 입니다 통해 가능 QUIC (아래 설명), 그것은 가능성이 필요 아니다.
생각해야 할 더 긴 답변 / 질문
간단히 말해서 이것은 WebRTC의 필수 기능이 아닙니다. 한 가지 질문을하겠습니다.
Alice와 Bob은 WebRTC를 통해 채팅 메시지를 교환하는 데이터 채널에 있습니다. WebRTC 연결을 생성하려면 아이스 서버 ( 첫 번째 링크 , 두 번째 링크 )를 사용하여 Alice와 Bob을 모두 Wikipedia에 인용해야합니다.
... 두 컴퓨터가 가능한 한 직접 서로 대화 할 수있는 방법을 찾기 위해 ..
이것은 Alice의 현재 IP 주소를 사용하여 STUN 또는 TURN 서버를 통해 Bob에게 제안을 할 것임을 의미합니다. 말했듯이 Alice가 IP 주소를 변경하려면 위치를 변경해야합니다. 즉, IP 주소가 변경 될 수 있도록 충분한 거리를 이동해야합니다. 실제로 이것은 아마도 그녀가 차를 타고 어딘가를 운전한다는 것을 의미합니다. 그렇지 않은 경우 Uber 또는 택시를 부르거나 자전거를 타십시오. 이러한 시나리오의 대부분에서 그녀는 컴퓨터를 닫아야하므로 p2p 연결을 종료해야합니다. 이상한 마법으로 그녀가 컴퓨터 / 연결을 닫지 않으면 브라우저가 새로 고쳐질 가능성이 높으므로 새 IP 주소에서 WebRTC 데이터 채널에 다시 연결됩니다 . 언제 WebRTC 데이터 채널을 생성하고 IP 변경을 처리해야합니까? 결론에 이르는 긴 설명, 클라이언트가 연결을 종료 / 재설정하지 않고 IP 주소를 변경하는 것은 실제로 발생하지 않습니다.
다른 대안을 찾고 싶다면 다음과 같은 몇 가지 예가 있습니다.
대안
IP 이벤트 리스너 추가 ★
지금 이것은 당신이 확인할 수있는 실제 전역 변수가 아니라 당신이 할 수 있는 온라인 API (일부 나열된 사용 여기 는 IP 변경하는 경우, 사용자의 IP 주소를 확인하기 위해) 변수 (또는 로컬 스토리지)에 저장 및 확인 . 루프에서 몇 가지 간단한 논리를 수행하여 확인하는 경우 WebRTC 연결을 재설정하고 그렇지 않은 경우 루프를 계속 진행합니다.
"파이핑"서버 사용
이미 설정된 http / https 서버 ( 여기 에 설명 된 파이핑 서버라고 함) 를 사용하여 간단한 채팅을 설정할 수 있습니다 . 자세한 내용은 기사에서 확인할 수 있지만 IP 주소 변경의 어려움에 노출되지 않는 서버 리스 채팅 시스템 ( 서버 를 만들지 않고도 사용할 수 있음)을 홍보 합니다. 그러나 상대방의 ID를 알아야하고, 상대방이 사용자의 ID를 알아야하므로이 간단한 채팅을 설정하기 전에 일종의 통신이 필요하기 때문에 효과적으로 솔루션을 쓸모 없게 만듭니다.
Node.js, Websockets 및 / 또는 Socket.io 사용 ★
간단한 채팅 앱을 만들거나 데이터 채널을 만들려면 Node.js와 Socket.io를 사용하면됩니다. 이것은 매우 간단하지만 서버와 관련이 있으므로 마지막으로 남겨 두었습니다. 그러나 쉽고 간단하게 이것을 적극 권장하며 IP 주소에 의존하지 않습니다. Node.js와 Express 프레임 워크에 대한 아주 좋은 시작 방법 은 여기 를 참조 하십시오 . 나는 Websockets의 전문가와는 거리가 멀지 만 MDN 은 항상 시작하기에 좋은 곳입니다. 좋은 Websocket이 있더라도 Socket.io는 초보자에게 훨씬 쉽다고 생각하므로 단순성보다 약간의 속도를 희생 할 의향이 있다면 여기에서 시작해야 합니다 . 이것들은 모두 좋은 서버 측 채팅 시작점입니다.
연결
간단한 대답
QUIC 연결 마이그레이션
IP 수신기
그래서 질문 ,
아이스 서버
MDN 문서 , Wikipedia
파이핑 서버
간단한 기사 , Github repo
Node.js, Websockets 및 Socket.io
Node.js를하여 빠른 설치 , 웹 소켓 소개 및 Socket.io 소개
별표 표시된 (★) 모든 대안은 개인적으로 권장됩니다.