websocket

发布时间 2023-09-13 09:48:18作者: hasome

简介

WebSocket 是HTML5一种新的网络传输协议,位于 OSI 模型的应用层,可在单个TCP连接上进行全双工通信。WebSocket 建议于 TCP 协议之上,与 HTTP 协议有良好的兼容性。协议标识符是ws;如果加密,则为wss。

WebSocket与HTTP的区别

HTTP协议时请求-响应式的,一般是一个请求建立一次握手,在HTTP1.1版本开始,TCP连接可别复用。

HTTP协议只能由客户端发送信息到服务端,服务端做出响应。

WebSocket通信是双向的,既可以由客户端发送信息,到服务端。也可以有服务端发送信息到客户端。

WebSocket通信建立过程

websocket通常是由客户端JavaScript脚本创建

var ws = new WebSocket("wss://normal-website.com/chat");

为了建立连接,会通过HTTP协议发送一个请求,告诉服务器接下来要使用websocket进行通信,如果服务器同意请求,接下来就会进行三次握手

WebSocket 握手消息的几个特性值得注意:

请求和响应中 的Connection和Upgrade标头表明这是一次 WebSocket 握手。

Sec-WebSocket-Version请求头指定WebSocket协议版本的客户端希望使用。通常是13.

Sec-WebSocket-Key请求报头包含Base64编码的随机值,这应该在每个握手请求是随机产生的。并不是用于身份认证的。

Sec-WebSocket-Accept响应报头包含在提交的值的散列Sec-WebSocket-Key请求头,具有在协议规范中定义的特定的字符串串联。这样做是为了防止错误配置的服务器或缓存代理导致误导性响应。

三次握手以后表示建立了客户端与服务端建立websocket连接,可以通过websocket协议进行通信。
由于TCP协议是复用的,所以可以通过一次连接,发送多个信息。
原则上,WebSocket 消息可以包含任何内容或数据格式。在现代应用程序中,通常使用 JSON 在 WebSocket 消息中发送结构化数据。

使用场景

基于WebSocket全双工、延迟的特性,应用场景比较广泛。

  1. 聊天
  2. 弹幕
  3. 协同编辑
  4. 股票报价实施更新
  5. 位置更新
  6. 直播实况

参考:https://www.freebuf.com/articles/web/369025.html