加载中...
WebSocket 是什么原理?为什么可以实现持久连接?
第1节:代码改善:一个“坑爹”的文字类冒险游戏
第2节:在禁止多重继承的情况下,如何设计“直立智慧猩猩”类?
第3节:C++多线程代码中的“乱序”执行现象
第4节:C++中函数指针有什么作用呢?
第5节:为什么我用c++写的游戏那么简陋?
第6节:多线程读写socket导致的数据混乱的原因是什么?
第7节:WebSocket 是什么原理?为什么可以实现持久连接?
第8节:怎样在c++中实现instanceof?
第9节:一个函数多处 return 是好风格吗?
第10节:C++中虚函数相比非虚函数的优势
第11节:为什么 C::C::C::C::foo() 能编译成功?
第12节:如何静态反射C++枚举的名字
第13节:看C++大叔如何拥 java 妹子入怀……
第14节:坨——理解递归实现“汉诺塔”代码的关键
第15节:C++编译器如何实现 const(常量)?
第16节:C++如何为断言加上消息
第17节:初学C++到什么水平,算是合格的初级开发工程师?
第18节:C++编程要避免使用单例模式吗?
第19节:学习C++要学boost库吗?
第20节:C++的继承就是复制吗?
第21节:C++构造函数失败,如何中止创建对象?
第22节:C++学完多线程后,学什么呢?
第23节:string_view 适合用做函数的返回值类型吗?
第24节:为指针取别名,为何影响const属性?
第25节:std::enable_shared_from_this 的存在意义?
课文封面

WebSocket 基于 TCP ,而TCP本就支持长连接,至于同样基于TCP的HTTP为什么一开始不支持长连接,那是因它自废武功……

问题

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。


长连接功能:拨通一次电话,只不要挂断,那么你是可以和你女友一直煲电话粥的。

  1. 电话通信是支持长连接的。
  2. “呆萌式校内通话”和“正常式通话”都基于电话通信。
  3. 呆萌式通话协议制定者认为:男生和女生通电话,太影响学习了!:于是制定规矩:通话必须“拨号 -> 提问 -> 回答”,然后就掐断电话。有第二个问题?那就再拔一次电话。
  4. ……
  5. 后来,校方自己也觉得自己太严苛了……规定:学生仍然以“呆萌式”开始,但在电话接通后,如果拔号方开口第一句就是:“我们升级为正常式电话吧!”,然后另一方回复:“好呀!”,于是两人就可以开始煲电话。