38 | WebSocket:沙盒里的TCP
该思维导图由 AI 生成,仅供参考
为什么要有 WebSocket
- 深入了解
- 翻译
- 解释
- 总结
WebSocket是一种基于TCP的轻量级网络通信协议,旨在解决HTTP请求-应答通信模式的不足。与HTTP相比,WebSocket具有全双工通信、实时推送数据的特点,使得服务器可以主动向客户端发送数据,提高了实时通信的效率。WebSocket的握手过程利用了HTTP的“协议升级”特性,通过特殊的HTTP GET请求和响应报文来完成握手,从而绕过浏览器沙盒、网络防火墙等限制,实现与服务器的直接TCP连接。WebSocket的帧结构采用二进制帧,具有结束标志位、操作码、帧长度和掩码等部分,使得通信过程更加灵活。尽管WebSocket在应用层,但使用方式与TCP Socket类似,需要用户自行管理连接、缓存、状态,因此在项目中引入WebSocket需慎重考虑。总的来说,WebSocket填补了HTTP请求-应答模式的不足,提高了实时通信的效率,但开发上相对复杂,适用于需要实时通信的场景。
《透视 HTTP 协议》,新⼈⾸单¥59
全部留言(36)
- 最新
- 精选
- 许童童思考题: 1.WebSocket 和 HTTP/2 都是用来弥补HTTP协议的一些缺陷和不足,WebSocket 主要解决双向通信、全双工问题,HTTP/2 主要解决传输效率的问题,两者在二进制帧的格式上也不太一样,HTTP/2 有多路复用、优先级和流的概念。 2.试着自己解释一下 WebSocket 里的”Web“和”Socket“的含义。 Web就是HTTP的意思,Socket就是网络编程里的套接字,也就是HTTP协议上的网络套接字,可以任意双向通信。 3.结合自己的实际工作,你觉得 WebSocket 适合用在哪些场景里? IM通信,实时互动,回调响应,数据实时同步。
作者回复: great。
2019-08-23231 - cugphoenix是不是可以这样理解:HTTP是基于TCP的,通过TCP收发的消息用HTTP的应用层协议解析。WebSocket是首先通过HTTP协议把TCP链接建好,然后通过Upgrade字段进行协议转换,在收到服务器的101 Switching Protocols应答之后,后续的TCP消息就通过WebSocket协议解析。
作者回复: 理解的基本正确,把WebSocket和http、tcp的关系理顺了。
2020-02-0721 - geraltlaush工作场景遇到过用户订阅股票的股价,股价波动时实时推送给海量订阅的用户,面试场景被问到两次,一 千万粉丝的明星发布动态如何推送给粉丝 二 海量用户的主播直播如何推送弹幕 当时回答消息队列,其实web socket才是比较好的方案
作者回复: WebSocket适合实时通信交互的场景,和消息队列其实是两个领域,不冲突,可以互相结合使用。
2019-08-23313 - 大土豆WebSocket定义为tcp over web,我个人感觉是不妥的,应该是"可靠有序的传输层 + 实现组包协议的应用层的长连接方案 over web"。WebSocket和HTTP已经有包的结构了,业务直接可以用了,浏览器A发一个websocket包,比如说数据是1234,给服务器,服务器可以获取这个包,数据是1234,和http一样了。而tcp还是原始的没头没尾的字节流,想要通讯,还得再自定义一个应用层的协议。
作者回复: 说的很对。 正文里的tcp over web只是一种比喻,强调了WebSocket与http的区别,与tcp的相似性,不是那么严谨。
2020-02-288 - 夏目两年前我实习的时候公司项目用过,到现在我才搞清楚和http的区别,惭愧…
作者回复: 这两个确实很像,第一次接触的人(包括我)也是容易弄糊涂。
2019-12-105 - ccx在 FINTECH 领域工作了几年了,自研发的外汇/数字货币交易系统的行情模块基本都是 websocket 实现的;另外还遇到一个有意思的场景,就是 discord 的机器人 Slash Commands 的实现也是基于 websocket 的。
作者回复: websocket在如今的互联网大环境下非常有用,基于http握手建连让它可以很容易运行在各种web服务上。
2021-09-304 - chao1、第二个字节后 7 位是“Payload len”,表示帧内容的长度。它是另一种变长编码,最少 7 位,最多是 7+64 位,也就是额外增加 8 个字节,所以一个 WebSocket 帧最大是 2^64。 2、如果数据的长度小于等于125个字节,则用默认的7个bit来标示数据的长度; 如果数据的长度为126个字节,则用后面相邻的2个字节来保存一个16bit位的无符号整数作为数据的长度; 如果数据的长度大于等于127个字节,则用后面相邻的8个字节来保存一个64bit位的无符号整数作为数据的长度; 老师,2是其它地方看到的,Payload len 这样设计的原因是什么,以及没明白为啥126个字节的长度要用16bit来表示
作者回复: 我个人也觉得WebSocket的变长编码设计的很奇怪。 第二个字节最高位被mask占用,所以低7位表示长度,最多127。 那么125一下在低7位就够了,126用作标志位,表示后续使用两个字节,127又是另外一个标志位,表示后面是四个字节。 所以超过125后低7位就不再是长度的含义了,而是标志位:126=>2 bytes, 127=> 4 bytes。
2019-09-184 - Evan Xia我们的业务场景是在下黑白棋的过程双方都能实时收到对方的落子, 用的是一个封装好的Centrifugo库,期间遇到最多的就是网络不好重连的问题
作者回复: 这个场景用websocket还是挺合适的,不过网络的问题就是协议之外的事情了。
2022-05-202 - ╭(╯ε╰)╮有个问题 30课介绍http2的时候不能重复使用443端口,所以重新用了8443端口。这节课websocket为什么就能跟http一起复用443端口呢?
作者回复: websocket基于http/1.1,所以它可以和443,也就是https在一起。 而http/2与http/1.1完全不同,就没有办法用同一个端口。
2023-01-20归属地:上海31 - Jasmine第二个字节后 7 位是“Payload len”,表示帧内容的长度。它是另一种变长编码,最少 7 位,最多是 7+64 位,也就是额外增加 8 个字节,所以一个 WebSocket 帧最大是 2^64。——这里最大的帧为什么不说是2^71呢?
作者回复: 前面的7位是标志位,已经被占用了,所以只能用64位。
2021-11-221