不使用时,WhatsApp如何接收消息?


23

我对WhatsApp在不使用时如何接收消息感到好奇。

我的意思是,我了解WhatsApp可以使用Internet连接而不是手机网络来工作。想象一下我几个小时都没有触摸手机。那时,一位朋友在WhatsApp上给我发送了一条消息。我马上得到。这是否意味着WhatsApp始终保持Internet连接连接?这是否意味着WhatsApp充当服务器,打开电话上的端口?还是长时间运行的HTTP请求?



Answers:


18

起初,我认为这很可能是Android云到设备消息传递的一个实例,但事实并非如此:WhatsApp并未声明必要的权限,并且它在Eclair(Android 2.1)中运行,而云到设备消息传递(及其替代品Google Cloud Messaging)至少需要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或更高版本的设备也安装了Market应用程序。因此,可能并非完全如此,但肯定是基于相同的原理。不过,您可能希望包括文章第二段的摘录,以使您的答案更有价值(并获得更多赞誉;)
Izzy

您说得对,@ Izzy,我应该添加更多详细信息。但是,当我坐在Subway上编写SGS3时,这很难做到。我已经更新了答案。:-)
Trebor Rude

3
Nat不允许步骤8,即使mobile处于静态ip上也是如此。可能的方法是Xmpp还是长时间轮询http

1
它确实具有必需的权限。它在Play商店中列为“从Internet接收数据”。见android.stackexchange.com/a/61794
nyuszika7h 2015年

2
不幸的是,传入的TCP连接在移动设备上几乎是不可能的。它们中的绝大多数没有公用IP地址,即使它们具有公用IP地址(例如,对于支持IPv6的运营商),通常也会过滤入站连接。如今,大多数应用程序都使用Google的推送服务或将自己的持久客户端滚动到服务器套接字连接(最著名的是Facebook)。根据我的经验,WhatsApp似乎采取了一种混合方法:如果GCM可用,则持久套接字在空闲几分钟后将关闭。
lxgr

8

我当然可以确定WhatsApp不会打开任何监听端口。大多数ISP阻止传入的请求,这是行不通的。

WhatsApp提供服务。基本上,这意味着从技术上讲,您永远不会退出WhatsApp。因此,“不运行”时接收消息的方式与运行WhatsApp时接收消息的方式完全相同。

客户端(在本例中为WhatsApp)连接到服务器。客户端维护该连接。当服务器有新要说的内容时,它通过该连接将其发送给客户端,仅此而已。

您的第一个猜测是正确的。

WhatsApp没有真正的注销机制,请参阅this

WhatsApp没有注销机制。该应用程序旨在始终保持连接状态,以便即使您没有积极使用手机也可以快速接收消息。这类似于SMS的工作方式,并允许WhatsApp消息几乎立即发送。


2
您的链接指向诺基亚-我在他们的网站上找不到适用于Android的类似问题。您确定Android同样适用吗?他们的Android常见问题解答中的这个问题表明,它采用了PUSH架构(在“消息是否仍需要很长时间才能到达手机吗?”部分下)-而不是持续连接的服务器/客户端。
Dylan Yaga 2013年

2
@DylanYaga是正确的。例如参见最后一段这样的回答Trebors这里回答
伊齐

这似乎是最合乎逻辑的。很多时候,这些服务被称为推送服务,但是我无法想象客户端会打开端口并实际上充当本地服务器。那肯定会引起安全问题。
SPRBRN 2014年

1

他们的常见问题解答建议他们使用GCM。检查“邮件是否仍需要很长时间才能到达手机?”的答案。


没错,FAQ暗示了这一点,但是正如Trebor Rude指出的那样,该应用程序没有必要的许可,因此他们不能使用GCM本身。
Dan Hulme

2
它确实具有必需的权限。它在Play商店中列为“从Internet接收数据”。见android.stackexchange.com/a/61794
nyuszika7h 2015年

2
从我所见,他们使用GCM(如果可用)。如果由于某种原因(例如,在没有Play服务的设备上或通过网络过滤的设备)不可用,则该套接字会无限期地处于闲置状态。
lxgr

0

与其他应用程序一样,Whatsapp也作为服务运行。(您始终保持连接状态)发送给您的消息将存储在whatsapp服务器上直到30天,在此期间,您的whatsapp应该处于活动状态以接收和确认收到消息。单个帐户与用户电话号码@ whatsapp.net一起存储


1
30天。请链接该事实的来源
beeshyams

0

我认为应该是这样的:

当whatsapp是新的时,它将使用基于PNS的解决方案,该PNS只会唤醒设备,一旦唤醒,它就可以创建与whatsapp服务器的套接字连接。

当whatsapp流行之后,大多数设备作为本机应用程序和本机应用程序将不会被杀死。在我的三星S8中,我无法卸载whatsapp,省电模式无法将其杀死

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.