모바일 채팅 앱은 IP 변경시 어떻게 연결을 유지하나요?
글쓴이: livey / 작성시간: 수, 2015/07/15 - 6:06오후
안드로이드 기기끼리 메세지를 송수신하는 앱을 만들어보려고하는데요
궁금한게 있습니다.
서버가 있는 경우는
서버 IP 또는 도메인만 알고있으면 변경된 IP를 서버에게 보내고 상대기기는 서버가 알려주는 IP를 통해 연결을 계속 유지할 수 있을것같습니다.
그러나
서버가 없는 경우에는 안드로이드 기기끼리 직접 연결해서 서버와 클라이언트 역할을 동시에 하게될텐데
문제는
이동하면서 IP 가 수시로 변경될텐데 어떻게 상대방과 연결을 계속 유지 할수 있나요?
각자 기기에 도메인이 할당된것도 아닐텐데 IP가 변경되면 상대에게 변경된 IP를 전달해주게끔 해줄것같은데
만약 변경된 IP 를 상대방이 못받게 되면 서로를 찾지 못하게되서 결국은 연결이 끊기게되지않나요?
이런 문제때문에 서버 없이 1:1로 채팅기능을 구현하기가 어렵겠죠?
위의 내용은 혼자 추측해본 내용인데요 실제로는 어떻게 되는건지 궁금합니다.
조언 좀 부탁드리겠습니다.
Forums:
서버없이는...
서버없이 클라이언트-클라이언트 통신은 거의 불가능하죠...
LTE망같이 휴대폰인터넷 망은 사설망으로 되어있어서 각각의 휴대폰들은 사설 IP을 받게 됩니다.
따라서 서로 다른 통신사 또는 멀리 떨어져 있는 스마트폰 끼리는 통신을 할 수 없습니다.
그래서 중계서버가 필요한 것이죠...
네 그렇군요
답변 감사합니다 잘 참고하겠습니다~
자료구조 1(채팅 애플리케이션 서버 전체 정보)(or
자료구조 1(채팅 애플리케이션 서버 전체 정보)(or DB)
---
아이디(문자열) / 고유값(정수)(Primary Key) / ... /
자료구조 2(채팅방 정보)(or DB)
---
고유값(정수)(Primary Key) / IP주소(가변)
이렇게 관리하면 될 듯 한데요?
IP 주소 변경되었다는 것은 클라이언트가 알고있으니
애플리케이션 프로토콜 만들어서 처리하면 될 듯 하고요.
네 그렇군요
흠.. 좀 복잡하네요 ^^;;
아무래도 좀 더 공부를 해야겠습니다..
댓글 감사합니다
그건!
연결 끊기면 WiFi 나 모바일 네트워크 연결이 있을 때 계속 연결 재시도를 하구요. 서버와 클라이언트의 동기화 매커니즘도 따로 생각하셔야 합니다.
그리고 클라이언트를 IP로 식별하지 마시고 HTTP 세션 쿠키처럼 식별해야 합나다. SHA1 랜덤해시가 제일 무난 할 터이구, 좀 더 고급스럽게 UUID를 사용하셔도 되구요.
같은 네트워크의 클라이언트들을 발견하는 기능이 필요합니다. 토렌트가 이 비슷한 걸로 같은 네트워크에 존재하는 피어들과 통신하죠. IPv4에서는 방송 패킷(뭐 255), v6 에는 로컬에 할당된 특수 주소가 있습니다.
UDP 패킷 계속 날리면서 클라이언트 발견하면 됩니다. 같은 네트워크가 아닌 다른 네트워크의 클라이언트도 발견하기 위해서는 토렌트의 트레커 처럼 중계하는 역할의 프로그램이 필요합니다.
아..
제가 너무 쉽게 생각한것같습니다
말씀하신 내용들 잘 이해가 안되네요 ㅠ
좀 더 공부 좀 해야겠습니다 ㅠㅠ
댓글 감사합니다~!
댓글 달기