MST

星途 面试题库

面试题:网络编程之WebSocket在股票行情应用中的原理

请阐述WebSocket协议在股票行情实时数据推送场景下,相较于传统HTTP轮询方式的优势,并简要说明WebSocket实现实时数据推送的基本原理。
17.3万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

优势

  1. 高效性
    • HTTP轮询需要客户端不断发起HTTP请求获取最新数据,每次请求都要携带完整的HTTP头信息,增加了网络开销。而WebSocket建立的是持久连接,只在连接建立时进行一次握手,后续数据传输只需传输少量的控制帧和数据帧,大大减少了网络流量。
    • 例如,在股票行情数据频繁变动的场景下,HTTP轮询可能每分钟发起多次请求,每次请求可能有几百字节的HTTP头信息,而WebSocket只需保持连接,数据传输时只携带行情数据,数据量小很多。
  2. 实时性
    • HTTP轮询存在轮询间隔,在间隔时间内即使服务器有新的股票行情数据,客户端也无法及时获取,导致数据有延迟。WebSocket则可以在服务器端数据更新时立即主动推送数据给客户端,几乎没有延迟,能让用户实时获取最新行情。比如股票价格瞬间大幅波动,WebSocket可以立刻将新价格推送给客户端,而HTTP轮询可能要等到下一次轮询时才能获取到。
  3. 服务器压力
    • HTTP轮询由于客户端频繁发起请求,服务器需要不断处理这些请求,增加了服务器的负担。WebSocket的持久连接减少了服务器处理连接建立和关闭的开销,且服务器可以按需推送数据,从而降低服务器压力。对于处理大量股票行情数据推送的服务器来说,这能显著提升服务器性能和稳定性。

基本原理

  1. 握手阶段
    • 客户端首先向服务器发起一个HTTP请求,请求头中包含特殊字段 Upgrade: websocket,表明要将HTTP协议升级为WebSocket协议。例如:
GET /stock - quote HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Key: dGhlIHNhbXBsZSBub25jZQ==
Sec - WebSocket - Version: 13
  • 服务器接收到请求后,如果支持WebSocket协议,会返回一个HTTP 101 Switching Protocols响应,进行协议升级,返回头中包含 Upgrade: websocketConnection: Upgrade 等字段,并计算 Sec - WebSocket - Accept 字段值返回给客户端。例如:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec - WebSocket - Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
  • 至此,握手完成,客户端和服务器之间建立起WebSocket连接。
  1. 数据传输阶段
    • 连接建立后,客户端和服务器可以通过这个持久连接双向传输数据。数据以帧的形式传输,每个帧包含操作码(用于标识帧类型,如文本帧、二进制帧等)、掩码(客户端发送给服务器的数据帧需要进行掩码处理)和数据负载。例如,服务器向客户端推送股票行情数据时,会将行情数据封装在一个文本帧中发送,客户端接收到帧后,根据协议解析出数据。
  2. 连接关闭阶段
    • 当一方想要关闭连接时,会发送一个关闭帧,另一方收到关闭帧后响应一个关闭帧,然后双方关闭连接。例如,当服务器维护连接资源有限,检测到某个客户端长时间无操作时,服务器可以发送关闭帧关闭连接,客户端收到后回复关闭帧,完成连接关闭。