一、什么是WebSocket
参考文献【一文吃透 WebSocket 原理 刚面试完,趁热赶紧整理 - 掘金】
WebSocket是一种基于TCP的全双工通信协议,在应用层。
二、WebSocket协议的原理
参考文献【一文吃透 WebSocket 原理 刚面试完,趁热赶紧整理 - 掘金】
与http协议一样,WebSocket协议也需要通过已建立的TCP连接来传输数据。具体实现上是通过http协议建立通道,然后在此基础上用真正的WebSocket协议进行通信,所以WebSocket协议和http协议是有一定的交叉关系的。
首先,WebSocket 是一个持久化的协议,相对于 HTTP 这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的 PHP 生命周期来解释。
HTTP 的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次 HTTP 请求就结束了。
在 HTTP1.1 中进行了改进,使得有一个 keep-alive,也就是说,在一个 HTTP 连接中,可以发送多个 Request,接收多个 Response。但是请记住 Request = Response, 在 HTTP 中永远是这样,也就是说一个 Request 只能有一个 Response。而且这个 Response 也是被动的,不能主动发起。
三、WebSocket的优缺点
参考文献【一文吃透 WebSocket 原理 刚面试完,趁热赶紧整理 - 掘金】
优点:建立WebSocket连接之后,客户端与服务端交流更方便
客户端只需要向服务端发送一次请求,服务端主动向客户端发送消息
缺点:在服务端的状态不会频繁变化的时候,就不需要使用WebSocket连接了,浪费性能
四、WebSocket应用场景
参考文献【一文吃透 WebSocket 原理 刚面试完,趁热赶紧整理 - 掘金】
聊天室
实时地图
五、WebSocket断线重连
参考文献【一文吃透 WebSocket 原理 刚面试完,趁热赶紧整理 - 掘金】
客户端每隔一段时间都会向服务端发送一次请求,证明客户端还活着。
六:总结
只需要向客户端发送一次请求,服务端可以主动推送消息到客户端
向客户端发送的第一次请求中包含upgrade、connection,则证明已经可以进行WebSocket请求了
参考文献【一文吃透 WebSocket 原理 刚面试完,趁热赶紧整理 - 掘金】