我对WhatsApp在不使用时如何接收消息感到好奇。
我的意思是,我了解WhatsApp可以使用Internet连接而不是手机网络来工作。想象一下我几个小时都没有触摸手机。那时,一位朋友在WhatsApp上给我发送了一条消息。我马上得到。这是否意味着WhatsApp始终保持Internet连接连接?这是否意味着WhatsApp充当服务器,打开电话上的端口?还是长时间运行的HTTP请求?
我对WhatsApp在不使用时如何接收消息感到好奇。
我的意思是,我了解WhatsApp可以使用Internet连接而不是手机网络来工作。想象一下我几个小时都没有触摸手机。那时,一位朋友在WhatsApp上给我发送了一条消息。我马上得到。这是否意味着WhatsApp始终保持Internet连接连接?这是否意味着WhatsApp充当服务器,打开电话上的端口?还是长时间运行的HTTP请求?
Answers:
起初,我认为这很可能是Android云到设备消息传递的一个实例,但事实并非如此:WhatsApp并未声明必要的权限,并且它在Eclair(Android 2.1)中运行,而云到设备消息传递(及其替代品Google Cloud Messaging)至少需要Froyo(Android 2.2)。
但是,它很可能是某种推送通知服务。如果不访问WhatsApp的源代码,就不可能确切地说出它是如何实现的。
不过,关于它在不使用时能够接收消息的部分相对容易解释。该应用程序几乎肯定具有一项在后台运行的服务,以便定期与服务器签入(或接收服务器推送或执行的任何操作)。当您收到一条消息时,该服务会弹出一个通知。
至于服务器如何执行推送的问题,这是一种可能性(同样,如果没有源代码,我将无法验证):
为此,该应用将需要监视网络连接的状态并在必要时重置侦听套接字/重新发送注册消息(例如,如果IP地址更改)。
我当然可以确定WhatsApp不会打开任何监听端口。大多数ISP阻止传入的请求,这是行不通的。
WhatsApp提供服务。基本上,这意味着从技术上讲,您永远不会退出WhatsApp。因此,“不运行”时接收消息的方式与运行WhatsApp时接收消息的方式完全相同。
客户端(在本例中为WhatsApp)连接到服务器。客户端维护该连接。当服务器有新要说的内容时,它通过该连接将其发送给客户端,仅此而已。
您的第一个猜测是正确的。
WhatsApp没有真正的注销机制,请参阅this。
WhatsApp没有注销机制。该应用程序旨在始终保持连接状态,以便即使您没有积极使用手机也可以快速接收消息。这类似于SMS的工作方式,并允许WhatsApp消息几乎立即发送。
他们的常见问题解答建议他们使用GCM。检查“邮件是否仍需要很长时间才能到达手机?”的答案。