← [ BACK_TO_NOTES ]

轮询(polling)

轮询(Polling)前后端通信原理与实现。

#concept #growing #network #browser #http #javascript

轮询(polling)

[!info] related notes

基础概念

原理

客户端定时向服务器发送请求检查是否有新数据。

技术特点

  • 协议:HTTP
  • 连接方向:客户端主动
  • 实时性:取决于轮询间隔
  • 浏览器支持:完全兼容
  • 服务器压力:相对较高

优点

  • 实现简单
  • 兼容性极好
  • 服务器无状态
  • 易于调试和监控

缺点

  • 实时性差
  • 资源浪费(无效请求)
  • 服务器压力大
  • 网络开销大

使用指南

实现示例

服务器端:


// API 端点:获取最新提醒

app.get('/api/reminders/latest', (req, res) => {

  const lastCheck = req.query.since || 0;

  const newReminders = getRemindersAfter(lastCheck);

  res.json({

    reminders: newReminders,

    timestamp: Date.now()

  });

});

客户端:


let lastCheckTime = 0;

  

function pollForReminders() {

  fetch(`/api/reminders/latest?since=${lastCheckTime}`)

    .then(response => response.json())

    .then(data => {

      if (data.reminders.length > 0) {

        data.reminders.forEach(reminder => {

          showNotification(reminder);

        });

      }

      lastCheckTime = data.timestamp;

    })

    .catch(error => {

      console.error('轮询失败:', error);

    })

    .finally(() => {

      // 下次轮询

      setTimeout(pollForReminders, 5000); // 5秒间隔

    });

}

  

// 启动轮询

pollForReminders();

适用场景

  • 对实时性要求不高的场景
  • 简单的状态检查
  • 老旧系统的兼容方案

实战经验

经验总结

信息参考

创建于 2025/1/1 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本