一幅图片引发的离婚大战编码之外关注共 1809字,需浏览 4分钟 ·2021-07-14 02:25 今天看到这两幅图片,不禁哈哈大笑。互联网上很多段子或者笑话,其实最能引起笑果的往往来自于真实生活,而不是那些为了笑果而编造的段子。 微信真的会因为网络不好而造成信息的前后颠倒吗?真的会。 为什么呢?马化腾说微信就是一个邮箱,只是这个邮箱比较快,让你感受不到这是一个邮箱,而让你有一种即时通信的错觉。 微信这个邮箱是这么来工作的:Alice登录微信服务器,认证身份,上线状态。这是一个基于TCP的长连接,安全加密。所谓长连接,就是Alice只要不是手机没电或者关机状态,这个长连接一直都是运行且双向可以通信的。这个负责登录的服务器,简称登录服务器。Alice给Bob发了一段文字,“Are you kidding me?”敲回车。这段文字是通过上文的长连接发送的吗? 不是的。而是通过一个短连接发送的,这个短连接是Alice点开Bob头像才建立的,这是一个 TCP + MMTLS(安全加密)+ http封装的短连接。 然后这个消息就被短连接以http格式发出去了。这个消息是直接发给Bob的吗?不是的,而是发给Bob的邮箱。 Bob的邮箱是在Bob的手机里、还是微信存储服务器里?微信服务器。 这样做有什么好处呢?假如Bob在飞机上,手机关机,Alice消息依然可以将消息发出。如果直接发给Bob手机,手机都关机了,那就压根无法建立连接,自然连消息都发不出。当然好处还有许多,比如Alice与Bob的手机都位于NAT设备的后方,他们之间的直接通信不一定100%成功。 如果Bob是在线状态,登录服务器会第一时间通过TCP长连接,通知Bob微信邮箱里有信,至于这封信存在邮箱的什么地方,这是一个http格式的链接。Bob微信会与链接所对应的存储服务器建立短链接,将消息下载并显示到本地窗口,然后关闭短连接。 如果Bob是离线状态,微信服务器其实也不急的,反正消息呆在存储服务器,不会飞的。等Bob下飞机上线了第一时间通知Bob微信就好了。 以上就是微信的工作流程。接下来讲为何微信会发生消息后发先至的情况?微信每次敲完一段文字,点击“发送“,这个消息就触发了一次:短连接的建立消息的传输短连接的断开 这个是标准的三步曲。当你再次发一段文字时,又触发了一次三步曲。两次的三步曲是相互独立的。 在网络畅通时,Alice第一个消息很快就发到Bob的邮箱,并被Bob微信呈现在窗口里。Alice第二个消息发出的晚,自然到达得晚,这是非常好理解的。 但是当网络不好时,第一个三步曲的消息报文不是那么幸运,丢了,然后Alice的手机一直在重传这个消息。Alice又发送第二个消息,运气特别好,没有丢,结果比第一个消息早到了几秒。 既然微信讲究及时通信,微信会第一时间通知Bob的微信,只是这个消息通知顺序,先是第二个消息,然后才是第一个消息。这样就造成了微信消息时序的颠倒。 最后,每一段消息内部文字并没有颠倒,对吗?这就是TCP的功劳,因为短连接依然使用的是TCP做为传输协议,TCP最擅长做的就是保证每一个字节按照先后顺序到达。TCP是一个可靠协议,可以修复由于网络暂时的中断而造成的字节丢失。但是如果Alice向Bob邮箱上传信的时候,网络发生了长时间的中断,超出了TCP最大修复时间,这时微信会提示Alice,消息发送失败!ok,今天的分享就到这里,另外,咱们这个号是技术号,以Java技术栈为主,所有Java技术内容力求通俗易懂,之前有些读者私下说,自己对SpringBoot和Cloud很感兴趣,但是自己是小白,希望我能快速且通俗易懂的介绍下他们,那么,它来了,次条发布了一篇有关的Java原创,通过手把手带你搭建相关案例,让你快速认识SpringBoot和Cloud,什么服务注册和发现,负载均衡啊,声明式调用啊,配置中心啊,熔断和限流啊,看了你就都明白了!结束时间:还请各位看官给庆哥点个赞!我也好继续分享!感谢大家!🙏 浏览 100点赞 评论 收藏 分享 手机扫一扫分享分享 举报 评论图片表情视频评价全部评论推荐 Looper.loop()引发的惨案开发者全社区0一行 Object.keys() 引发的思考程序员成长指北0一次fork引发的惨案!编程技术宇宙0PYPhotoBrowseriOS 的图片浏览器PYPhotoBrowser,用法简单的呈现一组图片的框架。支持哪些状态已发布(网络图片浏览)未发CP命令引发的思考嵌入式Linux0一次fork引发的惨案!w3cschool0一个Getter引发的血案程序员书单0PYPhotoBrowseriOS 的图片浏览器PYPhotoBrowser,用法简单的呈现一组图片的框架。支持哪些状态已发布(网络图片浏览)未发布(本地图片上传\发布\预览)示例代码:// 1. 创建缩略图图片链接数组 NSMutable一只猫引发的互联网争论数学算法俱乐部0一条 SQL 语句引发的思考小林coding0点赞 评论 收藏 分享 手机扫一扫分享分享 举报