38 | WebSocket:沙盒里的TCP
38 | WebSocket:沙盒里的TCP
讲述:Chrono
时长11:36大小13.28M
为什么要有 WebSocket
WebSocket 的特点
WebSocket 的帧结构
WebSocket 的握手
小结
课下作业
赞 19
提建议
精选留言(36)
- 许童童2019-08-23思考题: 1.WebSocket 和 HTTP/2 都是用来弥补HTTP协议的一些缺陷和不足,WebSocket 主要解决双向通信、全双工问题,HTTP/2 主要解决传输效率的问题,两者在二进制帧的格式上也不太一样,HTTP/2 有多路复用、优先级和流的概念。 2.试着自己解释一下 WebSocket 里的”Web“和”Socket“的含义。 Web就是HTTP的意思,Socket就是网络编程里的套接字,也就是HTTP协议上的网络套接字,可以任意双向通信。 3.结合自己的实际工作,你觉得 WebSocket 适合用在哪些场景里? IM通信,实时互动,回调响应,数据实时同步。展开
作者回复: great。
共 2 条评论26 - cugphoenix2020-02-07是不是可以这样理解:HTTP是基于TCP的,通过TCP收发的消息用HTTP的应用层协议解析。WebSocket是首先通过HTTP协议把TCP链接建好,然后通过Upgrade字段进行协议转换,在收到服务器的101 Switching Protocols应答之后,后续的TCP消息就通过WebSocket协议解析。
作者回复: 理解的基本正确,把WebSocket和http、tcp的关系理顺了。
17 - Leon📷2019-08-23工作场景遇到过用户订阅股票的股价,股价波动时实时推送给海量订阅的用户,面试场景被问到两次,一 千万粉丝的明星发布动态如何推送给粉丝 二 海量用户的主播直播如何推送弹幕 当时回答消息队列,其实web socket才是比较好的方案
作者回复: WebSocket适合实时通信交互的场景,和消息队列其实是两个领域,不冲突,可以互相结合使用。
共 3 条评论12 - 大土豆2020-02-28WebSocket定义为tcp over web,我个人感觉是不妥的,应该是"可靠有序的传输层 + 实现组包协议的应用层的长连接方案 over web"。WebSocket和HTTP已经有包的结构了,业务直接可以用了,浏览器A发一个websocket包,比如说数据是1234,给服务器,服务器可以获取这个包,数据是1234,和http一样了。而tcp还是原始的没头没尾的字节流,想要通讯,还得再自定义一个应用层的协议。
作者回复: 说的很对。 正文里的tcp over web只是一种比喻,强调了WebSocket与http的区别,与tcp的相似性,不是那么严谨。
5 - chao2019-09-181、第二个字节后 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。
4 - 夏目2019-12-10两年前我实习的时候公司项目用过,到现在我才搞清楚和http的区别,惭愧…
作者回复: 这两个确实很像,第一次接触的人(包括我)也是容易弄糊涂。
4 - Evan Xia2022-05-20我们的业务场景是在下黑白棋的过程双方都能实时收到对方的落子, 用的是一个封装好的Centrifugo库,期间遇到最多的就是网络不好重连的问题
作者回复: 这个场景用websocket还是挺合适的,不过网络的问题就是协议之外的事情了。
2 - ccx2021-09-30在 FINTECH 领域工作了几年了,自研发的外汇/数字货币交易系统的行情模块基本都是 websocket 实现的;另外还遇到一个有意思的场景,就是 discord 的机器人 Slash Commands 的实现也是基于 websocket 的。
作者回复: websocket在如今的互联网大环境下非常有用,基于http握手建连让它可以很容易运行在各种web服务上。
2 - 我母鸡啊!2020-05-243.结合自己的实际工作,你觉得 WebSocket 适合用在哪些场景里? 最近在做直播功能的项目,就用到了websovket的去做用户评论的推送,观看人数等的功能。
作者回复: nice
1 - Geek_5b0e472020-03-27向客户端监控屏推送时实更新数据,可以使用websocket
作者回复: nice,实时推送用WebSocket很好使。
1 - Daiver2020-01-23还有socket.io,算是websocket的超集了。
作者回复: socket.io是一个开发框架,而WebSocket是传输协议,两者虽然有联系,但不能混在一起。
共 2 条评论1 - Cris2019-08-23老师,我想问下,uri里的端口号,有什么用?为什么它是和协议对应的(http默认80,https默认443),却又写在域名的后面?
作者回复: 可以参考一下第6讲,端口号是跟tcp协议相关的概念。 因为域名实际上是ip地址的等价替换,所以端口号就可以跟在域名后面。
1 - 徐海浪2019-08-231. WebSocket 与 HTTP/2 有很多相似点,比如都可以从 HTTP/1 升级,都采用二进制帧结构,你能比较一下这两个协议吗? 差别:HTTP/2是请求与响应的模式,而WebSocket是双向的,服务器也可以主动向客户端发起请求。 2. 试着自己解释一下 WebSocket 里的”Web“和”Socket“的含义。 是基于web服务器,类似于tcp的socket方式来使用的协议。 3. 结合自己的实际工作,你觉得 WebSocket 适合用在哪些场景里? 我在实际工作中还没有用到WebSocket,觉得适合服务器主动推送的客户端的场景,比如站内信或者站内聊天,或者在线页游?展开
作者回复: 1.在WebSocket里没有请求响应的概念,收发的都是数据帧,通信的双方可以自己解释帧的含义。 2.应该是基于web,也就是http协议。 3.对。
共 2 条评论1 - -W.LI-2019-08-23老师好!websocket单机服务器能支持多少链接啊?之前没用过websocket。看帖子好像是通过key-value形式存储所有链接。需要用得时候通过key拿到链接往外写数据。希望老师科普下web socket的简单应用和实现,性能分析。 需要服务器主动推的感觉都可以用websocket做。 聊天工具:用户A,用户B, A->服务器(保存聊天记录)->B;B->服务器(保存聊天记录)->A;是这样么?展开
作者回复: WebSocket其实就是给tcp加了一层简单的包装,所以它的并发能力取决于服务器,并不是kv的形式,你应该把它理解成运行在http上的tcp,用tcp的思路去考虑它。
1 - ╭(╯ε╰)╮2023-01-20 来自上海websocket包装成http协议不应该就是按照http协议的“请求-应答”模式收发数据了嘛,还是没理解怎么实现的全双工?服务器向客户端推消息先封装成websocket帧,帧再模拟成fttp协议,然后http协议不支持推送,这不是没办法进行下去了嘛?
作者回复: websocket只是在握手建连阶段使用的http,之后就完全是自己的协议了,与http没有关系,通信方式是和tcp一样的。
- ╭(╯ε╰)╮2023-01-20 来自上海有个问题 30课介绍http2的时候不能重复使用443端口,所以重新用了8443端口。这节课websocket为什么就能跟http一起复用443端口呢?
作者回复: websocket基于http/1.1,所以它可以和443,也就是https在一起。 而http/2与http/1.1完全不同,就没有办法用同一个端口。
共 3 条评论1 - KaKaKa2023-01-09 来自上海请问下老师,握手的请求只能用 GET 吗?能用POST吗?如果不能是因为什么?
作者回复: 这个是websocket协议的规定,必须用这个。
- Jasmine2021-11-22第二个字节后 7 位是“Payload len”,表示帧内容的长度。它是另一种变长编码,最少 7 位,最多是 7+64 位,也就是额外增加 8 个字节,所以一个 WebSocket 帧最大是 2^64。——这里最大的帧为什么不说是2^71呢?
作者回复: 前面的7位是标志位,已经被占用了,所以只能用64位。
1 - Unknown element2021-06-04老师问下 1.Web socket既然没有流的概念那具体是怎么实现全双工的呢 两边都同时收发那包的顺序就乱了吧 2.Web socket帧里帧长度最大是7+64位那最长不应该是2^71位吗 为什么课程里说最长是2^64?
作者回复: 1.websocket本质上和tcp是一样的,双工是指通信的双方可以同时发送数据,但一个方向上的数据包还是有序的。 2.注意它用了变长编码,超过127才会用8个字节来表示长度,所以最大长度是2^64。
共 2 条评论 - 张峰2021-04-20服务器发送事件(Server-sent Events)是基于 WebSocket 协议的一种服务器向客户端发送事件和数据的单向通讯。 HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。 老师能讲解一下 Server-sent Events 和 websocket的相同和不同。
作者回复: 对这两个不是太了解,感觉像是js里的编程概念吧,与传输协议本身没有关系。 抱歉了。