为什么微信和QQ信息可以秒达?

用微信和QQ发送信息时,对方无论身在何处,几乎都是秒达,大家知道后面的原理吗?大家都知道,设计这样的不容易,成千上万的手机连接着服务器,如何才能这么快找到目标手机然后发出信息?

阅读 4.3k
4 个回答

个人猜测,仅供参考

  • QQ 服务器群是很强大的,可以想像,一个服务器只对应着一部分用户,而且可能保持着长连续

  • QQ 发送文件和图片的时候,可以直接在客户端之间建立连接,那么发消息也可以

  • 客户端之间的直接连接其实有时候不如通过服务器快——如果服务器和网络够强的话

  • QQ 服务器恐怕不是放在一个地方,CDN 的原理知道吧?

无他,唯网络好而已。

楼上@边城说的不错,但是他说的第一点与消息传达速度无关,集群只是提高服务端承载量。

个人觉得:当你发送消息的时候,你需要有一个指定动作,比如点开你要发消息的那个人聊天窗口,当你点开的一瞬间,向服务器发送消息,建立对话连接,当然需要很好的服务器的支撑。收件也一样,当其他人点开你的窗口聊天时,服务器自动和你建立连接并向你发送其他人的信息。当一段时间没有消息交互,或者软件进程检测关闭,就断开连接。这样可以大大的减缓服务器的压力并建立即时连接。

我来补充一下:
@边城 说的“在客户端之间建立连接”,存在一些问题。这样想,如果直接建立连接,服务器上就不会有你和对方发送的文件,当你们断开连接以后,你还能再次下载某个文件,这个文件从哪里来呢?你可以说缓存。 那么消息呢?我们知道qq和微信会存储你和对方的所有通话(不是不能,只是某些时候案件没有到达联系腾讯的程度而已),所以两者之间建立连接说法有些欠妥。
@晴天 说的点开窗口时服务器与你建立连接。首先不是当你点开窗口的时候这个连接才会建立。其次,如果服务器自动和你建立连接,那称作为推送,显然这里应该是手机(软件)主动与服务器建立连接,服务器只能listen请求。
除了上面几位说的,我还有一点补充就是发送消息的大小。多个对比发送一个字VS发送100个字(超过1个请求的最大长度),发送几个字vs发送图片,前者是因为建立的连接不同,后者是传输协议、服务器、存储算法不同。总结来说秒达有一部分原因在于数据量小。其他的还包括服务器架构,网络等。
-----分割线---
说一个有意思的内容,就是表情。我们知道发送表情可以用文字来替换。比如我们发送[胜利],会出现胜利的表情。同样我们发送“[胜利]”和发送相同数量的“[]胜利[]胜利[]胜利[]胜利”,然后看一下那个会“到达”更快。

推荐问题
宣传栏