• 许童童
    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。

    
     3
  • Leon📷
    2019-08-23
    工作场景遇到过用户订阅股票的股价,股价波动时实时推送给海量订阅的用户,面试场景被问到两次,一 千万粉丝的明星发布动态如何推送给粉丝 二 海量用户的主播直播如何推送弹幕 当时回答消息队列,其实web socket才是比较好的方案

    作者回复: WebSocket适合实时通信交互的场景,和消息队列其实是两个领域,不冲突,可以互相结合使用。

     1
     3
  • 酸奶啊火龙果
    2019-09-18
    1、第二个字节后 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。

    
     1
  • Cris
    2019-08-23
    老师,我想问下,uri里的端口号,有什么用?为什么它是和协议对应的(http默认80,https默认443),却又写在域名的后面?

    作者回复: 可以参考一下第6讲,端口号是跟tcp协议相关的概念。

    因为域名实际上是ip地址的等价替换,所以端口号就可以跟在域名后面。

    
     1
  • 徐海浪
    2019-08-23
    1. WebSocket 与 HTTP/2 有很多相似点,比如都可以从 HTTP/1 升级,都采用二进制帧结构,你能比较一下这两个协议吗?
    差别:HTTP/2是请求与响应的模式,而WebSocket是双向的,服务器也可以主动向客户端发起请求。
    2. 试着自己解释一下 WebSocket 里的”Web“和”Socket“的含义。
    是基于web服务器,类似于tcp的socket方式来使用的协议。
    3. 结合自己的实际工作,你觉得 WebSocket 适合用在哪些场景里?
    我在实际工作中还没有用到WebSocket,觉得适合服务器主动推送的客户端的场景,比如站内信或者站内聊天,或者在线页游?
    展开

    作者回复:
    1.在WebSocket里没有请求响应的概念,收发的都是数据帧,通信的双方可以自己解释帧的含义。

    2.应该是基于web,也就是http协议。

    3.对。

     1
     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
  • cugphoenix
    2020-02-07
    是不是可以这样理解:HTTP是基于TCP的,通过TCP收发的消息用HTTP的应用层协议解析。WebSocket是首先通过HTTP协议把TCP链接建好,然后通过Upgrade字段进行协议转换,在收到服务器的101 Switching Protocols应答之后,后续的TCP消息就通过WebSocket协议解析。

    作者回复: 理解的基本正确,把WebSocket和http、tcp的关系理顺了。

    
    
  • Daiver
    2020-01-23
    还有socket.io,算是websocket的超集了。

    作者回复: socket.io是一个开发框架,而WebSocket是传输协议,两者虽然有联系,但不能混在一起。

     1
    
  • Reco
    2020-01-04
    现在公司做的消息推送用的是SSE,如果不用从浏览器往服务器双向推,用SSE感觉要比WebSocket省事很多。。

    作者回复: sse还是基于http的,比较简单,但对浏览器要求高。而WebSocket是一个独立的协议,更加灵活,功能更强。

    只要合适应用场景就好。

    
    
  • 夏目
    2019-12-10
    两年前我实习的时候公司项目用过,到现在我才搞清楚和http的区别,惭愧…

    作者回复: 这两个确实很像,第一次接触的人(包括我)也是容易弄糊涂。

    
    
  • Demon.Lee
    2019-11-05
    之前用MQTT进行数据推送,与websocket还是不太一样。

    作者回复: 抱歉没用过mqtt,不能给出两者的对比。

    
    
  • 我叫徐小晋
    2019-09-09
    做网页的在线聊天用这个嘛?

    作者回复: 是的。

    
    
  • 丶景
    2019-08-29
    老师好,那是不是可以理解成其实 http2 也能解决 WebSocket 所解决的问题?因为 hhtp2 也能服务器推送?谢谢老师

    作者回复: 不行,WebSocket是实时全双工,而http/2的推送只是为了减少客户端请求的成本,出发点不同,用起来也就差距很大,毕竟http/2的主要应用场景还是标准的http请求应答,实时性不强。

    WebSocket和http/2各有自己的优势,不存在相互替代。

    
    
  • 崔伟协
    2019-08-26
    强制客户端掩码是什么意思

    作者回复: 协议里要求客户端发送WebSocket帧,必须使用掩码,否则就是格式错误,服务器应该拒绝接收。

    
    
  • 安排
    2019-08-24
    是js的实时web应用会调用websocket api吗?没接触过js,不太懂这套运行流程。

    作者回复: WebSocket API是HTML5的一部分,所以JS就可以使用WebSocket实现实时通信。

    
    
  • 安排
    2019-08-24
    虽然大多数情况下我们会在浏览器里调用 API 来使用 WebSocket。这句话不太理解,websocket不是只有浏览器自己会调用吗?用户还能在浏览器之上调用websocket api,可以举个例子吗?

    作者回复: WebSocket是一个通用的协议,只是大多数情况下是在http、浏览器里使用。

    完全可以自己写一个应用程序,使用WebSocket来通信。

    
    
我们在线,来聊聊吧