MST

星途 面试题库

面试题:网络编程之WebSocket数据传输机制基础

简述WebSocket的数据传输机制,包括如何建立连接以及数据传输的基本过程。同时说明WebSocket帧格式中,Opcode字段的常见取值及含义。
28.3万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

WebSocket的数据传输机制

  1. 建立连接
    • 客户端通过HTTP协议发起一个特殊的HTTP请求,请求头中包含 Upgrade: websocket 以及 Connection: Upgrade 等字段,表明要将HTTP连接升级为WebSocket连接。同时,还会发送 Sec - WebSocket - Key 字段,其值是一个Base64编码的随机字符串。
    • 服务器收到请求后,验证请求合法性。如果合法,服务器会返回一个HTTP 101 Switching Protocols响应,响应头中包含 Upgrade: websocketConnection: Upgrade 以及 Sec - WebSocket - Accept 字段。Sec - WebSocket - Accept 字段的值是通过将客户端发送的 Sec - WebSocket - Key 加上一个固定字符串 258EAFA5 - E914 - 47DA - 95CA - C5AB0DC85B11,然后进行SHA - 1哈希计算,最后进行Base64编码得到的。
    • 完成上述步骤后,HTTP连接成功升级为WebSocket连接,客户端和服务器可以进行双向通信。
  2. 数据传输基本过程
    • 连接建立后,客户端和服务器都可以主动向对方发送数据。数据以帧(frame)的形式传输。WebSocket协议对数据进行分段处理,每段数据构成一个帧。
    • 发送方将数据按照WebSocket帧格式进行封装,然后通过网络发送给接收方。接收方接收到帧后,按照帧格式进行解析,获取数据内容。如果数据被分成多个帧传输,接收方需要将多个帧的数据按顺序拼接起来,还原完整的数据。

WebSocket帧格式中Opcode字段的常见取值及含义

  1. %x0(0):表示这是一个延续帧(Continuation Frame),用于将一个较大的消息分成多个帧传输,该帧的数据是前一个帧数据的延续。
  2. %x1(1):表示这是一个文本帧(Text Frame),帧中的数据是UTF - 8编码的文本。
  3. %x2(2):表示这是一个二进制帧(Binary Frame),帧中的数据是二进制数据。
  4. %x8(8):表示这是一个关闭连接帧(Close Frame),用于关闭WebSocket连接,帧中可以携带关闭状态码和关闭原因等信息。
  5. %x9(9):表示这是一个Ping帧,发送方可以通过发送Ping帧来检查连接是否存活,接收方必须回复一个Pong帧。
  6. %xA(10):表示这是一个Pong帧,用于响应Ping帧,确认连接正常。