WebSocket 与长连接题库

这部分非常适合你后面面 AI 后端、实时消息、流式输出、Swoole 或 Go 服务岗位。

一、为什么需要 WebSocket

标准回答

因为 HTTP 是请求响应模型,客户端要主动轮询;WebSocket 建立的是长连接,可以实现服务端主动推送。

更好的说法

当业务需要实时交互、流式返回、状态持续更新或服务端主动通知时,WebSocket 比轮询更合适。

二、WebSocket 和 HTTP 的区别

  • HTTP:短连接,请求响应
  • WebSocket:长连接,双向通信

三、WebSocket 握手过程

  1. 客户端先发 HTTP Upgrade 请求
  2. 服务端返回 101 Switching Protocols
  3. 协议升级成功,之后走 WebSocket 帧通信

四、为什么 AI 场景经常会用 WebSocket 或 SSE

AI 输出经常是流式的,比如逐 token 返回、生成内容分段返回、任务进度流式更新。

  • 单向流式输出:SSE
  • 双向交互和会话控制:WebSocket

五、SSE 和 WebSocket 的区别

  • SSE:服务端单向推送,基于 HTTP,实现简单
  • WebSocket:双向通信,更适合交互式场景

六、心跳为什么重要

WebSocket 是长连接,需要通过心跳机制判断连接是否仍然可用,及时清理断开的连接。

七、断线重连怎么做

  • 指数退避
  • 最大重试次数
  • 重连后重新鉴权
  • 必要时补发未完成请求

八、认证怎么做

  • 握手时带 token
  • 握手成功后绑定用户身份
  • 服务端维护 connection -> user 映射

九、多实例部署下怎么推消息

如果服务有多实例,不能假设用户一定连在当前机器上,所以一般会通过:

  • Redis Pub/Sub
  • Kafka
  • 消息总线
  • 或统一连接网关层

十、连接数很大时要注意什么

  • 连接占用内存
  • 心跳成本
  • 广播成本
  • 单机 fd 限制
  • 负载均衡和连接保持
  • 热点房间 / 热点频道

十一、结合你的项目怎么讲

虽然你历史主项目不一定是典型 IM,但你完全可以从 AI 后端角度讲:

  • 如果做 AI 对话服务,需要把模型输出流式返回给前端
  • 如果是单向 token streaming,可以考虑 SSE
  • 如果要做会话控制、任务取消、实时状态、多事件消息,更适合 WebSocket

十二、技术总监最爱问的问题

1. 为什么不用轮询

因为实时性差、请求浪费大、服务端和客户端都更耗资源。

2. WebSocket 最大难点是什么

不是建连接,而是长连接管理、鉴权、心跳、断线重连、多实例路由和消息分发。

3. AI 场景用 WebSocket 还是 SSE

如果只是单向流式输出,SSE 更简单;如果要更强交互能力,WebSocket 更合适。

十三、你最适合背的总结句

我对 WebSocket 的理解重点不是协议细节,而是它适合解决实时交互和流式输出问题。尤其在 AI 场景里,如果只是单向 token streaming,SSE 已经很好用;如果需要双向交互、任务控制和多事件消息,WebSocket 会更适合,但也要额外处理鉴权、心跳、断线重连和多实例消息分发。