前端/移动开发面试题更新 2026-08-05

请描述在 Express 框架下构建实时通信功能的实现方式,特别是基于 SSE(Server-Sent Events)的服务端事件推送机制。

前端/移动开发技术原理方案权衡ExpressSSE

考察说明

考查候选人是否理解 Express 中 SSE 的实现原理及实际落地方式。

回答思路

  1. 【回答框架 1】SSE 是一种基于 HTTP 的服务器向客户端单向推送事件的技术,客户端通过 EventSource API 建立长连接,服务端返回 Content-Type 为 text/event-stream 的响应,并保持连接不关闭。
  2. 【回答框架 2】在 Express 中,实现 SSE 的关键是正确设置响应头:Content-Type: text/event-stream、Cache-Control: no-cache、Connection: keep-alive,然后通过 res.write 发送事件数据,格式为 'data: <内容>\n\n'。
  3. 【回答框架 3】需要监听连接关闭事件,如 req.on('close'),及时清理定时器和相关资源,避免内存泄漏。同时,可以设计一个简单的发布订阅模块,当业务事件发生时,向所有连接的客户端广播消息。
  4. 【回答框架 4】SSE 与 WebSocket 的核心区别在于:SSE 是单向的(服务端到客户端),基于 HTTP,支持自动重连和事件 ID;WebSocket 是全双工,需要额外协议升级。SSE 适合服务端推送场景,如实时通知、股票行情,但需要从客户端向服务端发送数据时,需配合普通 HTTP 请求。
  5. 【关键点 1】SSE 使用 text/event-stream 和 res.write 实现,注意设置 MIME 类型。
  6. 【关键点 2】必须处理连接关闭事件,防止资源泄漏。
  7. 【关键点 3】SSE 是单向的,适合服务端推送,与 WebSocket 对比时明确区别。
  8. 【关键点 4】可用 EventSource 客户端 API 直接接收。
  9. 【易错点 1】忘记设置正确的 Content-Type 或保持连接,导致浏览器无法识别。
  10. 【易错点 2】忽略 req.on('close'),导致定时器或广播对象引用未释放,造成内存泄漏。
  11. 【易错点 3】将 SSE 与 WebSocket 混为一谈,未区分单向与双向通信的适用场景。