java - 为什么微信和QQ信息可以秒达?
PHP中文网
PHP中文网 2017-04-18 10:41:07
[Java讨论组]
PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
巴扎黑

个人猜测,仅供参考

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

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

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

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

ringa_lee

无他,唯网络好而已。

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

阿神

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

天蓬老师

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号