39.轮询
轮询的概念 轮询(Polling) 是一种客户端主动向服务器发起周期性请求以获取最新数据的技术,分为两种模式:
短轮询(Short Polling): 客户端按固定间隔(如每秒)发送请求,服务器立即返回当前数据(无论是否有更新)。 特点:实现简单,但频繁请求可能导致资源浪费。
长轮询(Long Polling): 客户端发送请求后,服务器保持连接挂起,直到数据更新或超时(如 30 秒)才响应。客户端收到响应后立即发起新请求。 特点:减少无效请求,但服务器需维护更多并发连接。
1、短轮询(JavaScript)
// 使用 setInterval 定时请求
let pollInterval = setInterval(() => {
fetch("/api/data")
.then((response) => response.json())
.then((data) => updateUI(data));
}, 5000); // 每5秒请求一次
// 停止轮询
clearInterval(pollInterval);
2、长轮询(JavaScript)
function longPoll() {
fetch("/api/data")
.then((response) => response.json())
.then((data) => {
updateUI(data);
longPoll(); // 立即发起下一次请求
})
.catch(() => {
setTimeout(longPoll, 1000); // 失败后延迟重试
});
}
longPoll(); // 启动长轮询
类型 | 优点 | 缺点 |
---|---|---|
短轮询 | 实现简单,客户端逻辑统一 | 高延迟(依赖间隔),资源浪费(频繁请求) |
长轮询 | 减少无效请求,响应更快 | 服务器连接压力大,实现复杂度较高 |