WebSocket
作为HTTP
的补充和延申, 它们的关系又是怎样的?
更新
[2019-3-17]
- Initial Release
[2019-10-30]
Changed
- 更改文章结构
Added
- 新增
Websocket
、Socket
、HTTP
三者的介绍及异同
Socket
Socket
是为了方便操作传输层
的协议, 抽象出来的一层, 位于应用层
与传输层
之间, 可以理解为一个API
接口
Websocket
是什么?
Websocket
是H5
提出的一个新的协议, 与HTTP
协议同属于应用层, 也是基于TCP
来进行三次握手. 但是与HTTP
不同的是, Websocket
则采用了全双工通信
通信机制, 那么:
何谓全双工通信?
比如说有 A 和 B 两个端传输数据, 那么数据流可以从 A 到 B, 也可以从 B 到 A, 并且可以同时进行.
怎么做?
Websocket
也是基于TCP
来传输数据, 同样它的连接过程也是基于HTTP
, 在首次进行HTTP
请求的时候, 客户端通过Request Header
来携带Connection: Upgrade
以及Upgrade: websocket
字段, 来告知服务端将此次的连接升级为Webscoket
连接, 服务端收到标识字段, 同样在自己的Response Header
添加相应的字段
HTTP
众所周知, HTTP
是无连接、无状态的
, 并且是半双工通信
机制, 也就是说, 同一时刻, 只能允许单向的数据流, 并且服务端不能主动发送数据
发展历程
HTTP/1.0
采用了短链接
的方式, 也就是说一个完整的请求之后, 会断开连接HTTP/1.1
通过Keep-Alive
来进行长连接
, 可以在一个连接通道内发送多次请求Websocket
解决了HTTP
的服务端不能主动推送数据的问题, 属于全双工通信