一、正文引言
在一个完善的即时通讯IM应用中,WebSocket是极其关键的一环,它为基于Web的即时通讯应用提供了一种全双工的通信机制。但为了提升IM等实际应用场景下的消息即时性和可靠性,我们需要克服WebSocket及其底层依赖的TCP连接对于复杂网络情况下的不稳定性,即时通讯的开发者们通常都需要为其设计一套完整的连接保活、验活以及断片网重连方案。就断网重连而言,其重连响应速度将严重影响了上层应用的“即时性”和用户体验。试想打开网络一分钟后,微信的网络不能即时感知到socket连接的恢复,无法即时收发聊天消息的话,是不是很崩溃?因此,如何在复杂网络场景下,更即时快速地感知网络变动,并快速恢复WebSocket的可用性,就变得尤为重要。本文将基于笔者的开发实践,分享WebSocket在不同状态下、不同的网络状态下,应该如何实现快速断网重连。 * 阅读对象:本文适合有过IM底层网络实际开发经验,或者对底层网络实现有较深了解的开发者阅读。如果对底层网络了解甚少,建议跳过本文,直接阅读网络本文末尾附录部分的基础后再回头来看。* 站长点评:本文内容没有高大上,但比较干货,实用性较高,内容也很通俗,建议可详细阅读。文中虽讲的是WebSocket,但思想可以延伸应用到基于TCP协议的同类技术中。
二、预备知识
本文中将要分享的内容是基于实践总结,如果你对Web端的即时通讯知识还一头雾水,务必先读:《新手入门贴:史上最全Web端即时通讯技术原理详解》、《Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE》。限于篇幅,本文不会深究WebSocket技术细节,如有兴趣请系统学习:
《新手快速入门:WebSocket简明教程》
《WebSocket详解(一):初步认识WebSocket技术》
《WebSocket详解(二):技术原理、代码演示和应用案例》
《WebSocket详解(三):深入WebSocket通信协议细节》
《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》
《WebSocket详解(五):刨根问底HTTP与WebSocket的关系(下篇)》
《WebSocket详解(六):刨根问底WebSocket与Socket的关系》
三、全文阅读
因微信内容审查原因,本文无法全文发布在公众号, 如需阅读全文,请前往即时通讯网(52im.net)社区:http://www.52im.net/thread-3098-1-1.html,或点击下文的“阅读原文”!以上,多谢理解!
附录:链接速查
微信中无法引用外链,本文相关资料链接如下:
1)《新手入门贴:史上最全Web端即时通讯技术原理详解》:
http://www.52im.net/thread-338-1-1.html
2)《新手快速入门:WebSocket简明教程》:
http://www.52im.net/thread-831-1-1.html
3)《WebSocket详解(一):初步认识WebSocket技术》:
http://www.52im.net/thread-331-1-1.html
4)《WebSocket详解(二):技术原理、代码演示和应用案例》:
http://www.52im.net/thread-326-1-1.html
5)《WebSocket详解(三):深入WebSocket通信协议细节》:
http://www.52im.net/thread-332-1-1.html
6)《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》:
http://www.52im.net/thread-1258-1-1.html
7)《WebSocket详解(五):刨根问底HTTP与WebSocket的关系(下篇)》:
http://www.52im.net/thread-1266-1-1.html
8)《WebSocket详解(六):刨根问底WebSocket与Socket的关系》:
http://www.52im.net/thread-1273-1-1.html
9)《详解Web端通信方式的演进:从Ajax、JSONP 到 SSE、Websocket》:
http://www.52im.net/thread-1038-1-1.html
10)《理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性》:
http://www.52im.net/thread-1341-1-1.html
11)《微信小程序中如何使用WebSocket实现长连接(含完整源码)》:
http://www.52im.net/thread-1703-1-1.html
12)《八问WebSocket协议:为你快速解答WebSocket热门疑问》:
http://www.52im.net/thread-2488-1-1.html