Skip to content

服务端主动推送数据到客户端 ​

问题 ​

Web 应用从服务器主动推送数据到客户端有哪些方式?

结论 ​

常见方案有轮询、长轮询、Server-Sent Events、WebSocket、Web Push。选择时看是否需要双向通信、实时性、兼容性和基础设施成本。

方案特点适合场景
短轮询客户端定时请求简单状态刷新,实时性要求低
长轮询服务端等到有数据或超时再响应兼容性好,实时性中等
SSE服务端到客户端单向事件流通知、日志、进度、行情
WebSocket双向持久连接聊天、协同编辑、游戏、实时控制
Web Push浏览器推送通知,可在页面关闭后触达通知类产品

SSE 示例:

js
const source = new EventSource('/events');

source.onmessage = (event) => {
  console.log(event.data);
};

WebSocket 示例:

js
const socket = new WebSocket('wss://example.com/socket');
socket.onmessage = (event) => console.log(event.data);

面试回答:

服务端向客户端推送可以用短轮询、长轮询、SSE、WebSocket 和 Web Push。只需要服务端单向推送时 SSE 简单稳定;需要双向实时通信时用 WebSocket;通知类场景可用 Web Push。轮询兼容性好但浪费请求,长轮询是折中方案。

参考来源 ​