作者回复: great。
作者回复: WebSocket适合实时通信交互的场景,和消息队列其实是两个领域,不冲突,可以互相结合使用。
作者回复: 我个人也觉得WebSocket的变长编码设计的很奇怪。
第二个字节最高位被mask占用,所以低7位表示长度,最多127。
那么125一下在低7位就够了,126用作标志位,表示后续使用两个字节,127又是另外一个标志位,表示后面是四个字节。
所以超过125后低7位就不再是长度的含义了,而是标志位:126=>2 bytes, 127=> 4 bytes。
作者回复: 可以参考一下第6讲,端口号是跟tcp协议相关的概念。
因为域名实际上是ip地址的等价替换,所以端口号就可以跟在域名后面。
作者回复:
1.在WebSocket里没有请求响应的概念,收发的都是数据帧,通信的双方可以自己解释帧的含义。
2.应该是基于web,也就是http协议。
3.对。
作者回复:
WebSocket其实就是给tcp加了一层简单的包装,所以它的并发能力取决于服务器,并不是kv的形式,你应该把它理解成运行在http上的tcp,用tcp的思路去考虑它。
作者回复: 理解的基本正确,把WebSocket和http、tcp的关系理顺了。
作者回复: socket.io是一个开发框架,而WebSocket是传输协议,两者虽然有联系,但不能混在一起。
作者回复: sse还是基于http的,比较简单,但对浏览器要求高。而WebSocket是一个独立的协议,更加灵活,功能更强。
只要合适应用场景就好。
作者回复: 这两个确实很像,第一次接触的人(包括我)也是容易弄糊涂。
作者回复: 抱歉没用过mqtt,不能给出两者的对比。
作者回复: 是的。
作者回复: 不行,WebSocket是实时全双工,而http/2的推送只是为了减少客户端请求的成本,出发点不同,用起来也就差距很大,毕竟http/2的主要应用场景还是标准的http请求应答,实时性不强。
WebSocket和http/2各有自己的优势,不存在相互替代。
作者回复: 协议里要求客户端发送WebSocket帧,必须使用掩码,否则就是格式错误,服务器应该拒绝接收。
作者回复: WebSocket API是HTML5的一部分,所以JS就可以使用WebSocket实现实时通信。
作者回复: WebSocket是一个通用的协议,只是大多数情况下是在http、浏览器里使用。
完全可以自己写一个应用程序,使用WebSocket来通信。