websocket

180 阅读1分钟

特点

  1. WebSocket,是基于 TCP 的支持全双工通信的应用层协议
  2. 客户端、服务器,任何一方都可以主动发消息给对方
  3. WebSocket 使用 80 客户端(ws://)、443 服务器(wss://)端口,可以绕过 大多数防火墙的限制与 HTTP 不同的是,WebSocket 需要先建立连接
  4. 这就使得 WebSocket 成为一种有状态的协议,之后通信时可以省略部分状态 信息
  5. WebSocket 需要借助 HTTP 协议来建立连接: 配置头部字段,Connection 字段必须设置 Upgrade , 表示客户端希望连接升级,Upgrade 必须设置 websocket , 表示希望升级到 WebSocket 协议

建立连接过程

  1. Sec-WebSocket-Key:是客户端生成的随机字符串
  2. 服务器接收到客户端的 Sec-WebSocket-Key 后,会进行以下操作,1Sec-WebSocket-Key 加上一个固定的 GUID 值(258EAFA5- E914-47DA-95CA-C5AB0DC85B11), 然后进行加密 (SHA-1 摘要计算+base64), 将 3 的结果做为 Sec-WebSocket-Accept 响应头的值,返回给客户端
  3. 客户端进行相应的验证

解决问题

WebSocket 和 HTTP 属于平级关系,都是应用层的协议,其实 TCP 本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方)只是 HTTP 的“请求-应答模式”限制了 TCP 的能力