WhatsApp은 사용하지 않을 때 어떻게 메시지를받을 수 있습니까?


23

WhatsApp에서 사용하지 않을 때 메시지를 수신 할 수있는 방법이 궁금합니다.

나는 WhatsApp이 휴대폰 네트워크가 아닌 인터넷 연결을 사용하여 작동한다는 것을 알고 있습니다. 몇 시간 동안 전화를 건드리지 않았다고 상상해보십시오. 그 순간 친구가 WhatsApp에 메시지를 보냅니다. 나는 그것을 즉시 얻는다. 이것은 WhatsApp이 항상 인터넷 연결을 유지하고 있다는 것을 의미합니까? 이는 WhatsApp이 서버로 작동하여 전화에서 포트를 여는 것을 의미합니까? 아니면 오래 실행되는 HTTP 요청일까요?



답변:


18

처음에는 이것이 Android 클라우드 대 장치 메시징 인스턴스 일 가능성이 가장 높았 지만 다음과 같이 할 수는 없었습니다. WhatsApp은 필요한 권한을 선언하지 않고 Eclair (Android 2.1)에서 작동하지만 클라우드 대 장치 메시징 ( Google 클라우드 메시징을 대체하려면 최소한 Froyo (Android 2.2)가 필요합니다.

그러나 이는 일종의 푸시 알림 서비스 일 가능성이 높습니다 . WhatsApp의 소스 코드에 액세스하지 않고 어떻게 구현되었는지 정확하게 말할 수는 없습니다.

그러나 사용하지 않을 때 메시지를 수신 할 수 있다는 점은 비교적 설명하기 쉽습니다. 응용 프로그램에는 거의 확실하게 백그라운드에서 실행 되는 서비스 가있어 서버와 주기적으로 체크인하거나 서버 푸시 또는 기타 작업을받습니다. 메시지를 받으면 서비스가 알림을 팝업합니다.

서버가 어떻게 푸시를 수행 할 수 있는지에 대한 질문에 대해서는 다음과 같은 가능성이 있습니다 (다시 말하면 소스 코드없이 확인할 수 없습니다).

  1. WhatsApp은 두 개의 소켓을 시작하고 엽니 다. 하나는 듣고, 하나는 서버에 메시지를 보냅니다.
  2. WhatsApps는 첫 번째 소켓에서 청취를 시작합니다.
  3. WhatsApp은 전화 번호와 수신 소켓 포트가 포함 된 메시지를 서버로 보내고 확인을 기다립니다.
  4. 서버는 메시지의 전화 및 포트 번호와 메시지의 IP 주소를 기록합니다.
  5. 서버는 승인을 앱에 보냅니다.
  6. 앱이 승인을 받고 메시지 소켓을 닫습니다.
  7. 대상으로 전화 번호가 포함 된 메시지가 서버로 들어옵니다.
  8. 서버는 전화 번호와 연결된 IP 주소와 포트 번호를 사용하고 해당 정보를 사용하여 메시지를 전화로 보냅니다.

이 기능을 사용하려면 앱이 네트워크 연결 상태를 모니터링하고 청취 소켓을 재설정하고 필요한 경우 등록 메시지를 다시 보내야합니다 (예 : IP 주소가 변경되는 경우).


2
Whatsapp는 Playstore 앱에 의존합니까? Wikipedia 링크에서 인용 : 마켓 애플리케이션이 설치된 Android 2.2 이상을 실행하는 기기가 필요합니다. 따라서 정확히 그렇지 않을 수도 있지만 확실히 동일한 원칙을 기반으로합니다. 하지만 기사의 두 번째 단락에서 발췌 한 내용을 포함시켜 답을 더 가치있게 만들고 더 많은 찬사를 받도록 할 수 있습니다.
Izzy

당신은 옳습니다, @Izzy, 자세한 내용을 추가해야합니다. 그래도 지하철에 앉아 SGS3에 글을 쓰는 것은 어려웠습니다. 지금 답변을 업데이트했습니다. :-)
Trebor Rude

3
모바일이 정적 IP를 사용하더라도 Nat는 8 단계를 허용하지 않습니다. 가능한 방법은

1
필요한 권한이 있습니다. Play 스토어에 "인터넷에서 데이터 수신"으로 표시됩니다. android.stackexchange.com/a/61794
nyuszika7h

2
불행히도 들어오는 TCP 연결은 모바일 장치에서 불가능합니다. 압도적 인 대다수는 퍼블릭 IP 주소가 없으며 IPv6 가능 운영자의 경우에도 들어오는 연결은 일반적으로 필터링됩니다. 오늘날 대부분의 응용 프로그램은 Google의 푸시 서비스를 사용하거나 자체 영구 클라이언트와 서버 소켓 연결 (특히 Facebook)을 롤링합니다. WhatsApp은 내 경험에 하이브리드 접근법을 사용하는 것 같습니다. GCM을 사용할 수있는 경우 몇 분 동안 유휴 상태가 지속되면 영구 소켓이 닫힙니다.
lxgr

8

나는 WhatsApp가 수신 포트를 열지 않을 것이라고 확신합니다. 대부분의 ISP는 들어오는 요청을 차단하지만 작동하지 않습니다.

WhatsApp에 서비스가 있습니다. 기본적으로 이는 기술적으로 WhatsApp을 종료하지 않는다는 것을 의미합니다. 따라서 "실행 중이 아닌"메시지를받는 방식 WhatsApp은 메시지를 실행할 때받는 방식과 동일합니다.

클라이언트 (이 경우 WhatsApp)는 서버에 연결합니다. 클라이언트는 해당 연결을 유지합니다. 서버가 새로운 것을 말하면, 그 연결을 통해 클라이언트에게 서버를 보냅니다. 그리고 그게 전부입니다.

첫 번째 추측은 맞습니다.

WhatsApp에는 진정한 로그 아웃 메커니즘이 없습니다 . 이 내용을 참조하십시오 .

WhatsApp에는 로그 아웃 메커니즘이 없습니다. 이 응용 프로그램은 휴대 전화를 적극적으로 사용하지 않더라도 메시지를 빠르게받을 수 있도록 항상 연결되도록 설계되었습니다. 이것은 SMS 작동 방식과 유사하며 WhatsApp 메시지를 거의 즉시 전달할 수 있습니다.


2
귀하의 링크 는 Nokia에 대한 것입니다. 해당 사이트에서 Android와 유사한 질문을 찾을 수 없습니다. Android에도 동일하게 적용됩니까? Android FAQ 의이 질문은 지속적으로 연결된 서버 / 클라이언트가 아니라 PUSH 아키텍처 ( "전화가 너무 길어 메시지가 너무 오래 걸립니까?"섹션 아래에 있음)를 사용하고 있음을 나타냅니다.
Dylan Yaga

2
@DylanYaga가 정확합니다. 의 마지막 단락 예를 참조하십시오 이 답변을 하고 Trebors 여기에 대답 .
Izzy

이것은 가장 논리적 인 것 같습니다. 이러한 서비스를 푸시 서비스라고하는 경우가 많지만 클라이언트가 포트를 열고 실제로 로컬 서버 역할을한다고 상상할 수 없습니다. 보안 문제가 발생할 수 있습니다.
SPRBRN

1

그들의 질문은 그들이 GCM을 사용하여 제안합니다. "전화를 받기까지 여전히 메시지가 너무 오래 걸립니까?"에 대한 답을 확인하십시오.


FAQ에 따르면 Trebor Rude가 지적한 것처럼 앱에 필요한 권한이 없으므로 GCM 자체를 사용할 수 없습니다.
Dan Hulme

2
필요한 권한이 있습니다. Play 스토어에 "인터넷에서 데이터 수신"으로 표시됩니다. android.stackexchange.com/a/61794
nyuszika7h

2
내가 본 것에서 GCM을 사용할 수 있다면 사용합니다. 어떤 이유로 든 사용할 수없는 경우 (예 : Play 서비스가없는 장치 또는 네트워크에 의해 필터링 된 경우) 소켓은 무한정 유지됩니다.
lxgr

0

다른 앱과 같은 Whatsapp는 서비스로 실행됩니다. (항상 연결되어 있음) 전송 된 메시지는 30 일까지 whatsapp 서버에 저장되며,이 기간 동안 whatsapp가 활성화되어 메시지 수신을 확인합니다. 개별 계정은 @ whatsapp.net 사용자 전화 번호와 함께 저장됩니다


1
삼십일 . 그 사실에 대한 소스를 연결하십시오
beeshyams

0

나는 이것이 다음과 같아야한다고 생각합니다.

WHATSAPP이 새로워 졌을 때 PNS 기반 솔루션을 사용했을 것입니다.이 PNS는 장치를 깨우고 일단 깨우면 WHATSAPP 서버에 대한 소켓 연결을 만들 수 있습니다.

WHATSAPP가 인기를 얻은 후 대부분의 장치는 기본 응용 프로그램 및 기본 응용 프로그램으로 제공되지 않습니다. 내 삼성 S8에서 나는 whatsapp를 제거 할 수 없습니다, 절전 모드는 그것을 죽일 수 없습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.