WebSocket 协议

279 阅读1分钟

发展历史

  • 2008年提出,2011年12月11日,被 RFC 6455-the WebSocket Protocol 定位标准
  • HTML5 新增 WebSocket 协议,之后其他语言开始支持

作用

可以在浏览器和服务器之间建立一个全双工的通信通道

全双工通信协议:浏览器和服务器之间可以同时发送和接收请求

特点

  • 推送功能,支持服务器向客户端推送数据。
  • 减少通信量,与 HTTP 相比,减少了每次连接时的总开销。WebSocket 的首部信息很小,通信量也相应的减少了。

通信流程

  1. 浏览器发起 HTTP 请求,请求建立 WebSocket 连接
  2. 服务器响应同意协议更改
  3. 相互发送数据

WebSocket 通信,在 HTTP 连接建立之后,需要完成一次“握手”的步骤。

  • 握手·请求,实现 WebSocket 通信,需要用到 HTTP 的 Upgrade 首部字段,告知服务器通信协议发生改变,已达到握手的目的。
  • 握手·响应,对于之前的请求,返回状态码 101 Switching Protocols 的响应。

成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数据帧,而是采用 WebSocket 独立的数据帧。

底层原理

  • WebSocket 协议建立在 TCP 协议基础上(Socket 通信也是基于 TCP 协议)
  • TCP 协议是全双工协议,http 协议也是基于 tcp 的,但他是单向的。
  • WebSocket 没有同源限制

同源:同一个IP,同一个端口 跨域异常:前端配置代理或者服务器端如 Nginx 上反向代理去解决跨域问题。

实现方式

  • 基于 java 注解实现 WebSocket 服务器端
  • 基于 Spring 提供的上层封装