有人能告诉我我的手机是如何接收whatsapp消息的吗?例如,我的手机是每秒都请求whatsapp服务,还是在服务器端收到我的消息时,服务器会向我的手机发送ping。我不想知道确切的过程,但一个概述就可以了。
发布于 2015-07-05 21:21:31
好吧,我想,在这个范围内回答并不那么容易,但这里是如何工作的。
为此,您可能需要了解移动端和服务器端的技术,side.So,让我尝试以一种非常简单的方式来解释它,这可能是实现。
1)不能,您的手机不是每次都ping服务器。像这样的轮询在网络上增加了很多开销,而且如果响应有延迟,可能会堆叠多个调用,从而导致服务器端的巨大流量。相反,这是另一种方式。每当服务器收到任何消息时,它都会ping您,而不是告诉您收到了一条消息。
2)希望点1清楚地表明了它的另一种方式。现在我想让你了解一下推送通知。推送通知是服务器可以用来通知手机任何新的消息、信息或更新的东西。这里有一个链接,可以给出更多关于安卓https://parse.com/tutorials/android-push-notifications推送通知的细节
3)服务端如何处理请求。这本身就是一个大话题。基本上是这样的。我假设有两个用户,A和B
当然,这项工作涉及到许多技术,以便处理数百万个并发连接,并在不阻塞其他连接的情况下快速响应。
如果你想对这项技术有一个基本的了解,我建议你看看socket io和node js。下面是一个聊天示例http://socket.io/get-started/chat/
希望这能有所帮助
发布于 2015-07-05 21:34:13
WhatsApp使用XMPP (eXtensible消息传递和存在协议)来处理消息传递系统。XMPP在很大程度上类似于HTTP,客户端使用XMPP服务器打开套接字,并在客户端登录后一直保持打开状态。它不像常规的REST API,客户端打开套接字,发送/接收数据,然后关闭套接字。只要您登录,套接字就会打开。对于WhatsApp,这是永恒的(不是真的,如果连接终止,WhatsApp会自动重新连接)
XMPP协议已被用于各种聊天应用程序,如Google Talk、Facebook messenger等。
就实际技术而言,WhatsApp在安卓上使用大量定制版本的Smack库来构建其客户端,并使用定制的eJabberd服务器来处理XMPP流量。他们可能有不同的后端解决方案来处理数据,虽然可能在一个云存储/计算网络上(我认为这是heroku,但没有真正的想法)。在iOS和其他平台上,我想他们可能已经开发了自己的库。开发自己的库并不是一项很大的工作,尤其是当您有自定义需求并拥有一支开发团队的时候。我使用了一个适用于Windows Phone的库,并对它们进行了大量定制,以便为我们工作。我对这个库做了一些改进,但由于时间的原因,我不能把它们提交给原始的repo (文档确实很难)。
无论如何,如果你对学习这项技术感兴趣,你可以阅读Oriely的"XMPP:权威指南“,并可以访问XMPP Standards Foundation。
https://stackoverflow.com/questions/31230642
复制相似问题