WebSocket 总结

87 阅读2分钟

WebSocket 是h5提供的一种在单个tcp连接上进行全双工通信的协议,在通过一次http协议进行握手之后,就可以创建客户端和服务端的持久性连接,可以双向发送或接收信息,服务端可以主动向客户端推送信息,通常用于数据需要及时更新的场景。

websocket的请求url用的是ws或者是wss,在http协议里对应着http和https。如果客户端需要发起websocket请求就需要在请求首部里作出说明,connection的值写成upgrade,upgrade的值写成websocket,服务器在收到请求后就会看到连接要求升级,从upgrade的值知道要建立websocket连接。其中还有set-websocket-key,这个key提供给服务器来验证是否受到一个有效的websocket请求。

服务端接收到请求后,会作出响应,这时的状态码是101,毕竟还未正式作出响应,响应中的connection和upgarde值和请求一致,来表明连接验证已经升级了,并在响应里加上sec-websocket-accept,它的值根据请求的key来生成的,表明服务器同意建立连接,建立连接后就可以进行正式传输数据,客户端和服务端进行双向传输数据

在一些情况下,比如网络异常、程序的切换等一些因素导致连接中断。这个时候就需要我们去设置心跳机制、断线重连来处理这类的情况。

心跳机制, 客户端设置每隔一段时间向服务端发送判断连接的信息,如果没反应则连接断开了,让客户端重新连接。

断线重连,如果客户端发送信息,服务器没反应,那可能是连接断开了,并执行websocket监听连接关闭的事件回调,在里面设置重新连接

http请求是由客户端发起请求,服务端进行响应,这个过程是单向的,只能客户端主动发起,并且如果需要持续的获取资源就要不断的发起请求。

长轮询,让http请求保持一段时间,而服务器需要腾出资源来保持连接,即使在没有数据的情况下