websocket
wǎng luò shí huāng 2021-10-26
websocket
websocket 学习
# 开始学习 websocket:
【详解】单工、双工、半双工、全双工(时分双工 TDD、频分双工 FDD)
- https://www.sohu.com/a/458463292_120070959
参考:https://gitee.com/wangluoshihuang/WebSocket/tree/master (opens new window)
学习视频:https://www.bilibili.com/video/BV1uP4y1b7Tn/?spm_id_from=333.337.search-card.all.click&vd_source=677fb3b76ec1277e95a8ffb1282e30fa 看第 55 分钟
- 基于 tcp 通讯;平常我们的客户端请求是基于 http 协议的。
- 浏览器和服务器双向通讯
- 支持的数据流是二进制和文本的
- 只需要一次握手,即可建立通讯。
- 在握手的时候采用的是 http 协议:
- 在第一次握手的时候是借用了 http 发送了握手信息。一旦服务器同意就马上建立 websocket 链接。
- 普通 http 协议如下:
- websocket 协议如下:

- 第二处标志声明发送的是 http 请求;
- 第三处声明使用 websocket 第几版,默认标准最终版是第 13 版,其他版本有缺陷。
- 第四处声明 upgrade——虽然本次是借助 http 发送请求,但是请求一旦建立,那么就需要协议升级。询问服务器支不支持。第五点声明想要升级为什么协议。
- 第六处:响应头声明已经升级为 websocket。第 7 处声明是请求要求升级的。
- 第 8 和 9 是用来标识客户端的,相当于客户端 id:标识了每一次 websocket 建立的 key。用处后面讲。每个客户端和服务器建立的链接是唯一的,所以 8 和 9 的值也不一样。
- 在握手的时候采用的是 http 协议:
- 其特点包括:
- (1)建立在 TCP 协议之上,服务器端的实现比较容易
- (2)与 HTTP 协议有着良好的兼容性。默认端口也是 80 和 443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器
- (3)数据格式比较轻量,性能开销小,通信高效。
- (4)可以发送文本,也可以发送二进制数据。
- (5)没有同源限制,客户端可以与任意服务器通信.
- 相似技术(都是由服务器向客户端发送数据)
- Server-sent Events (SSE)
- https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html
- https://www.cnblogs.com/goloving/p/9196066.html
- SPDY (读作“sPeeDY”) : 已不再维护,由 HTTP/2 取代https://baike.baidu.com/item/SPDY/3399551#7
- WebRTC——更好的处理流数据,一般用于直播,此时服务器向客户端发送数据
- https://baike.baidu.com/item/WebRTC/5522744
- Server-sent Events (SSE)
- 客户端和服务端代码参考:http://wangxince.site/my-demo-markdown/project/websocket#websocket-node
- 我们全部不用手写 websocket,直接使用socket.io (opens new window)这个库即可
- 这个库兼容性强,多语言,断网重连等功能:https://blog.csdn.net/u012903034/article/details/139899045
Service Workers
web worker、service worker、websocket、 share worker
在谷歌浏览器里查看各个 worker:
- 地址栏输入:chrome://inspect ,左侧就有各种 worker 的选项,点击就可以查看了。
