问题
WebSocket是HTML5出的东西,也就是说HTTP协议没有变化,但HTTP是不支持持久连接的(长连接,循环连接的不算),或者说WebSocket干脆就不是基于HTTP来执行的?但是……说不通啊!
所以,WebSocket是什么原理?为什么可以实现持久连接?
南老师回答
1、TCP 是支持长连接的。
2、HTTP 和 WebSocket 都基于 TCP。
3、但是,当年(1990)的HTTP制定者认为WEB业务不需要(或者最好不要)有长连接。
4、于是最初的HTTP自行砍(阉)掉(割)了长连接这个特性。
扩展知识点:一开始的HTTP从TCP身上砍掉的东东应不止长连接,TCP全双工,甚至多路复用通信也砍了。
5、后来,先是出于性能问题,于是各种挣扎着想在兼容历史的情况多少恢复一点长连接。于是有了版本1.1, 1.2升级。
6、再后来,是出于功能问题的需求,感觉没有长连接简直是玩不下去了……
7、2001年,勇敢打脸。在HTTP的报文里,加一点信息(反正HTTP报文本身的扩展性还是非常好的,比如它的那个HEADER);利用这个信息,相当于前后端两个约定:“我们直接换到另一个协议上去吧?”,这另一个协议,就是WebSocket。
长连接功能:拨通一次电话,只不要挂断,那么你是可以和你女友一直煲电话粥的。
- 电话通信是支持长连接的。
- “呆萌式校内通话”和“正常式通话”都基于电话通信。
- 呆萌式通话协议制定者认为:男生和女生通电话,太影响学习了!:于是制定规矩:通话必须“拨号 -> 提问 -> 回答”,然后就掐断电话。有第二个问题?那就再拔一次电话。
- ……
- 后来,校方自己也觉得自己太严苛了……规定:学生仍然以“呆萌式”开始,但在电话接通后,如果拔号方开口第一句就是:“我们升级为正常式电话吧!”,然后另一方回复:“好呀!”,于是两人就可以开始煲电话。