js长轮询和短轮询

长轮询和短轮询通常用于服务器端推送数据到客户端,特别是在需要实时或者近实时获取数据的场景。

短轮询:

客户端定时向服务器发送请求,服务器接收到请求后立即返回响应,无论是否有新数据。

长轮询:

客户端向服务器发送请求,服务器如果没有新数据可返回则会等待,直到有新数据可以返回,然后返回响应并关闭连接。客户端接收到响应后立即再次发起新的长轮询请求。

以下是使用JavaScript进行短轮询和长轮询的简单示例:

function pollData() {
  fetch('/api/data')
    .then(response => response.json())
    .then(data => {
      console.log(data);
      // 在获取到数据后,再次发起轮询
      setTimeout(pollData, 1000); // 每隔1秒发起一次请求
    })
    .catch(error => console.error(error));
}
 
// 初始化轮询
pollData();

长轮询(Long Polling):

function longPollData() {
  const timeout = 10000; // 服务器端预计数据到达的最长时间
  fetch('/api/data?timeout=' + timeout)
    .then(response => response.json())
    .then(data => {
      console.log(data);
      // 无论是否有数据,都立即发起新的长轮询
      longPollData();
    })
    .catch(error => {
      if (error.message === 'Timeout') {
        // 如果发生超时,则在适当的延迟后重新发起长轮询
        setTimeout(longPollData, 1000);
      } else {
        console.error(error);
      }
    });
}
 
// 初始化长轮询
longPollData();

在实现长轮询时,服务器端需要支持长时间保持连接的能力,例如使用HTTP流或WebSockets。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值