国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

輪詢(xún)和長(zhǎng)輪詢(xún)的講解和實(shí)戰(zhàn)

這篇具有很好參考價(jià)值的文章主要介紹了輪詢(xún)和長(zhǎng)輪詢(xún)的講解和實(shí)戰(zhàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

當(dāng)今web應(yīng)用程序?qū)?shí)時(shí)通信的需求越來(lái)越高,為了滿(mǎn)足客戶(hù)需求,輪詢(xún)和長(zhǎng)輪詢(xún)成為常用的技術(shù)手段。本文將深入講解一下輪詢(xún)實(shí)現(xiàn)原理、優(yōu)缺點(diǎn)和使用場(chǎng)景。

一、輪詢(xún)概念

輪詢(xún)是一種客戶(hù)端與服務(wù)器之間實(shí)時(shí)通信的技術(shù)手段。
基本原理:客戶(hù)端定期發(fā)送請(qǐng)求來(lái)查詢(xún)服務(wù)器是否有新數(shù)據(jù)或事件,并將響應(yīng)返回給客戶(hù)端。如果服務(wù)器有新的數(shù)據(jù)或事件,則將其返回給客戶(hù)端;如果沒(méi)有,則返回一個(gè)空響應(yīng)??蛻?hù)端收到響應(yīng)后,可以處理數(shù)據(jù)或事件,并根據(jù)需要繼續(xù)發(fā)送下一個(gè)請(qǐng)求。

定義:輪詢(xún)是指在一定的時(shí)間間隔內(nèi),定時(shí)向服務(wù)器發(fā)送請(qǐng)求,獲取最新數(shù)據(jù)的過(guò)程。輪詢(xún)通常用于從服務(wù)器獲取實(shí)時(shí)更新的數(shù)據(jù)。

// 客戶(hù)端代碼
function pollServer() {
  fetch('/api/data')
    .then(response => response.json())
    .then(data => {
      // 處理服務(wù)器響應(yīng)的數(shù)據(jù)
      console.log('Received data:', data      // 繼續(xù)下一次輪詢(xún)
      setTimeout(pollServer, 5000);
    });
}

// 開(kāi)始輪詢(xún)
pollServer();


二、輪詢(xún)的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):簡(jiǎn)單易實(shí)現(xiàn),適用于各種瀏覽器和服務(wù)器。

缺點(diǎn):輪詢(xún)會(huì)產(chǎn)生大量的無(wú)效請(qǐng)求,浪費(fèi)帶寬和服務(wù)器資源,產(chǎn)生不必要的網(wǎng)絡(luò)流量和延遲,并對(duì)服務(wù)器和客戶(hù)端資源造成額外的負(fù)擔(dān)。同時(shí),在短時(shí)間內(nèi)頻繁地發(fā)送請(qǐng)求可能會(huì)被服務(wù)器視為惡意行為,導(dǎo)致 IP 被封禁等問(wèn)題

注:輪詢(xún)適用于不需要實(shí)時(shí)性的應(yīng)用場(chǎng)景

三、長(zhǎng)輪詢(xún)概念

長(zhǎng)輪詢(xún)是一種改進(jìn)的輪詢(xún)技術(shù),其主要目的是降低輪詢(xún)過(guò)程中的資源消耗和延遲。長(zhǎng)輪詢(xún)的基本原理是客戶(hù)端發(fā)送一個(gè)HTTP請(qǐng)求給服務(wù)器,并保持連接打開(kāi),直到服務(wù)器有新的數(shù)據(jù)或事件時(shí)才返回響應(yīng)給客戶(hù)端。在這期間,服務(wù)器會(huì)一直保持連接打開(kāi),直到超時(shí)或有新數(shù)據(jù)或事件

// 客戶(hù)端代碼
function longPollServer() {
  fetch('/api/data')
    .then(response => {
      if (response.status === 204) {
        // 服務(wù)器返回204表示沒(méi)有新數(shù)據(jù)或事件,繼續(xù)進(jìn)行長(zhǎng)輪詢(xún)
        longPollServer();
      } else if (response.status === 200) {
        // 服務(wù)器返回200表示有新數(shù)據(jù)或事件,處理數(shù)據(jù)并進(jìn)行下一次長(zhǎng)輪詢(xún)
        response.json().then(data => {
          console.log('Received data:', data);

          // 繼續(xù)進(jìn)行長(zhǎng)輪詢(xún)
          longPollServer();
        });
      }
    });
}

//開(kāi)始長(zhǎng)輪詢(xún)
longPollServer

四、長(zhǎng)輪詢(xún)的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):長(zhǎng)輪詢(xún)相較于輪詢(xún)技術(shù)來(lái)說(shuō),減少了不必要的網(wǎng)絡(luò)流量和請(qǐng)求次數(shù),降低了服務(wù)器和客戶(hù)端的資源消耗

缺點(diǎn):相對(duì)于傳統(tǒng)的輪詢(xún)技術(shù),長(zhǎng)輪詢(xún)的實(shí)現(xiàn)更加復(fù)雜,并且需要服務(wù)器支持長(zhǎng)時(shí)間保持連接的能力。

注:長(zhǎng)輪詢(xún)適用于對(duì)實(shí)時(shí)性要求較高的應(yīng)用場(chǎng)景,例如在線游戲、即時(shí)消息推送等。在這些場(chǎng)景下,降低延遲和減少不必要的資源消耗對(duì)于提供良好的用戶(hù)體驗(yàn)非常重要。

五、輪詢(xún)和長(zhǎng)輪詢(xún)的區(qū)別比較

輪詢(xún)和長(zhǎng)輪詢(xún)都是實(shí)現(xiàn)客戶(hù)端與服務(wù)器實(shí)時(shí)通信的技術(shù)手段,它們?cè)谫Y源消耗、延遲和實(shí)時(shí)性等方面存在差異。
輪詢(xún)是在固定的時(shí)間間隔內(nèi)向服務(wù)器發(fā)送請(qǐng)求,即使服務(wù)器沒(méi)有數(shù)據(jù)更新也會(huì)繼續(xù)發(fā)送請(qǐng)求(不需要實(shí)時(shí)性要求很高的場(chǎng)景)。
長(zhǎng)輪詢(xún)是先發(fā)送一個(gè)請(qǐng)求,服務(wù)器如果沒(méi)有數(shù)據(jù)更新,則不會(huì)立即返回,而是將請(qǐng)求掛起,直到有數(shù)據(jù)更新時(shí)再返回結(jié)果(對(duì)實(shí)時(shí)性要求較高的場(chǎng)景)。

輪詢(xún)和長(zhǎng)輪詢(xún)的講解和實(shí)戰(zhàn),javascript,前端

六、示例代碼

案例1:使用輪詢(xún)實(shí)現(xiàn)實(shí)時(shí)時(shí)間更新的簡(jiǎn)單示例代碼:

// 客戶(hù)端代碼
function pollServer() {
  發(fā)送HTTP請(qǐng)求給服務(wù)器
  fetch('/api/time')
    .then(response => response.json())
    .then(data => {
      // 處理服務(wù)器響應(yīng)的時(shí)間數(shù)據(jù)
      const currentTime = new Date(data.time);
      document.getElementById('time').innerText = currentTime.toLocaleTimeString();

      // 繼續(xù)下一次輪詢(xún)
      setTimeout(pollServer, 5000);
    });
}

// 開(kāi)始輪詢(xún)
pollServer();

案例2:可視化動(dòng)態(tài)展示數(shù)據(jù),有的需要十秒輪詢(xún)請(qǐng)求一次,有的需要3分鐘請(qǐng)求一次,有的需要一天一次(順便加一個(gè)定時(shí),每天幾點(diǎn)鐘定時(shí)請(qǐng)求一次)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-806168.html

<template>
  <div class="echart">
  </div>
</template>

<script>

export default {
 data() {
   return {
    num_0:0,
    num_1:0,
    num_2:0,
   timer_10: null,//10S短輪詢(xún)
   timer_3: null,  //3分鐘短輪詢(xún)
   timer_24: null,  //24小時(shí)長(zhǎng)輪詢(xún)

  };
 },
  destroyed() {
   //離開(kāi)頁(yè)面是時(shí)記得銷(xiāo)毀
    this.clearAll()
  },
  created() {
    // 進(jìn)入頁(yè)面開(kāi)始請(qǐng)求
    this.getShotList3()
    this.getShotList10()
    this.getLongList()
    // 開(kāi)啟定時(shí)
    this.startRequest()
 },
  methods: {
    startRequest() {
      //10S短輪詢(xún):組合使用setInterval setTimeout實(shí)現(xiàn)輪詢(xún)可解決瀏覽器崩潰
      this.timer_10 = window.setInterval(() => {
        setTimeout(this.getShotList10(), 0);
      },10000);
      // 3分鐘短輪詢(xún)
      this.timer_3 = window.setInterval(() => {
        setTimeout(this.getShotList3(), 0);
      }, 180000);
      // 每日一次的輪詢(xún):每日定點(diǎn)7點(diǎn)查詢(xún)一次;計(jì)算當(dāng)前時(shí)間和目標(biāo)時(shí)間的時(shí)間間隔,如果超過(guò),則設(shè)置定時(shí)查詢(xún)的時(shí)間間隔為距離明天目標(biāo)小時(shí)的距離,如果還沒(méi)到就設(shè)置時(shí)間為當(dāng)前時(shí)間到目標(biāo)小時(shí)的距離。
       this.setRegular(7);
    },
    setRegular(targetHour) {
      let nowTime = new Date()
      let nowSeconds = nowTime.getHours() * 3600 + nowTime.getMinutes() * 60 + nowTime.getSeconds()        // 計(jì)算當(dāng)前時(shí)間的秒數(shù)
      let targetSeconds =  targetHour * 3600  // 計(jì)算目標(biāo)時(shí)間對(duì)應(yīng)的秒數(shù)
      // 判斷是否已超過(guò)今日目標(biāo)鐘點(diǎn)數(shù),若超過(guò),時(shí)間間隔設(shè)置為距離明天目標(biāo)小時(shí)的距離
      let timeInterval = targetSeconds > nowSeconds ? targetSeconds - nowSeconds: targetSeconds + 24 * 3600 - nowSeconds
      this.timer_24 = window.setInterval(() => {
        setTimeout(this.getLongList(), 0)
        }, timeInterval * 1000);
    },
    getLongList() {
      console.log("24小時(shí)輪詢(xún)" + this.num_0++ + "次");

    },
    clearAll() {
      clearInterval(this.timer_10);
      clearInterval(this.timer_3);
      clearInterval(this.timer_24);
      this.timer_10 = null;
      this.timer_3 = null;
      this.timer_24 = null;
      console.log('銷(xiāo)毀');
    },
    // 10S的短輪詢(xún) 數(shù)據(jù)全部拿到之后在進(jìn)行下一次請(qǐng)求
    getShotList10() {
      console.log("10秒鐘請(qǐng)求" + this.num_1++ + "次");
    },
   // 3分鐘的短輪詢(xún) 數(shù)據(jù)全部拿到之后在進(jìn)行下一次請(qǐng)求
    getShotList3() {
      console.log("3分鐘請(qǐng)求" + this.num_2++ + "次");
   },
}

}
</script>

<style  scoped>
.echart{
	width:100%;
	height:100%
}

</style>


到了這里,關(guān)于輪詢(xún)和長(zhǎng)輪詢(xún)的講解和實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 輪詢(xún)的時(shí)候,總是報(bào)500服務(wù)器無(wú)法處理大量的請(qǐng)求

    HTTP 500 錯(cuò)誤通常表示服務(wù)器內(nèi)部錯(cuò)誤。這意味著后端服務(wù)器出現(xiàn)了一些問(wèn)題,導(dǎo)致它無(wú)法處理請(qǐng)求。如果你在調(diào)用任務(wù)狀態(tài)的接口時(shí)總是遇到這個(gè)錯(cuò)誤,可能有以下一些原因: 1.后端代碼出現(xiàn)了錯(cuò)誤,導(dǎo)致服務(wù)器無(wú)法正確處理請(qǐng)求。你可以查看服務(wù)器的日志,找出具體的錯(cuò)誤

    2023年04月14日
    瀏覽(18)
  • 即時(shí)通訊:短輪詢(xún)、長(zhǎng)輪詢(xún)、SSE 和 WebSocket 間的區(qū)別

    在現(xiàn)代 Web 開(kāi)發(fā)中,即時(shí)通訊已經(jīng)成為許多應(yīng)用程序的重要組成部分。為了實(shí)現(xiàn)即時(shí)通訊,開(kāi)發(fā)人員通常使用不同的技術(shù)和協(xié)議。本文將介紹四種常見(jiàn)的即時(shí)通訊實(shí)現(xiàn)方法:短輪詢(xún)、長(zhǎng)輪詢(xún)、SSE(服務(wù)器發(fā)送事件)和 WebSocket,并探討它們之間的區(qū)別。 短輪詢(xún)是最簡(jiǎn)單的即時(shí)通

    2024年02月12日
    瀏覽(27)
  • IM通信技術(shù)快速入門(mén):短輪詢(xún)、長(zhǎng)輪詢(xún)、SSE、WebSocket

    IM通信技術(shù)快速入門(mén):短輪詢(xún)、長(zhǎng)輪詢(xún)、SSE、WebSocket

    ??IM通信技術(shù)快速入門(mén):短輪詢(xún)、長(zhǎng)輪詢(xún)、SSE、WebSocket ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁(yè):IT·陳寒的博客 ??該系列文章專(zhuān)欄:Java面試技巧 ??其他專(zhuān)欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果文中

    2024年02月05日
    瀏覽(22)
  • Tomcat長(zhǎng)輪詢(xún)?cè)砼c源碼解析

    Tomcat長(zhǎng)輪詢(xún)?cè)砼c源碼解析

    系列文章目錄和關(guān)于我 最近在看工作使用到的配置中心原理,發(fā)現(xiàn)大多數(shù)配置中心在推和拉模型上做的選擇出奇的一致選擇了 基于長(zhǎng)輪詢(xún)的拉模型 基于拉模型的客戶(hù)端輪詢(xún)的方案 客戶(hù)端通過(guò)輪詢(xún)方式發(fā)現(xiàn)服務(wù)端的配置變更事件。輪詢(xún)的頻率決定了動(dòng)態(tài)配置獲取的實(shí)時(shí)性。

    2023年04月16日
    瀏覽(21)
  • AsyncContext優(yōu)雅實(shí)現(xiàn)HTTP長(zhǎng)輪詢(xún)接口

    接到一個(gè)需求,實(shí)現(xiàn)方案時(shí)需要提供一個(gè)HTTP接口,接口需要hold住5-8秒,輪詢(xún)查詢(xún)數(shù)據(jù)庫(kù),一旦數(shù)據(jù)庫(kù)中值有變化,取出變化的值進(jìn)行處理,處理完成后返回響應(yīng)。這不就是長(zhǎng)輪詢(xún)嗎,如何優(yōu)雅的實(shí)現(xiàn)呢? 在這之前先簡(jiǎn)單介紹下長(zhǎng)連接和短連接 HTTP長(zhǎng)鏈接(Keep-Alive) 概念:

    2024年02月09日
    瀏覽(17)
  • RocketMQ的長(zhǎng)輪詢(xún)(Long Polling)實(shí)現(xiàn)分析

    目錄 前言 長(zhǎng)輪詢(xún) 1.實(shí)現(xiàn)步驟 1.1客戶(hù)端輪詢(xún)發(fā)送請(qǐng)求 1.2服務(wù)端處理數(shù)據(jù) 1.3客戶(hù)端接收數(shù)據(jù) 2.實(shí)現(xiàn)實(shí)例 RocketMQ長(zhǎng)輪詢(xún) 1.PullMessage服務(wù) 2.PullMessageProcessor服務(wù) 3.PullCallback回調(diào) 總結(jié) 消息隊(duì)列一般在消費(fèi)端都會(huì)提供push和pull兩種模式,RocketMQ同樣實(shí)現(xiàn)了這兩種模式,分別提供了兩個(gè)實(shí)

    2024年02月07日
    瀏覽(22)
  • javascript中輪詢(xún)一個(gè)接口的方法,setInterval和setTimeout + 遞歸、requestAnimationFrame

    輪詢(xún):就是定時(shí)重復(fù)請(qǐng)求一個(gè)接口,比如,我們想要知道一個(gè)訂單的狀態(tài),就需要輪訓(xùn)訂單狀態(tài)的接口,查詢(xún)到我們想要的結(jié)果 (支付成功或者失敗) 就終止輪詢(xún)。 方法一:setInterval 這個(gè)方法我們一般都能想到,用法很簡(jiǎn)單,但是這種方法,如果我們忘記了清空定時(shí)器就會(huì)導(dǎo)

    2024年02月16日
    瀏覽(19)
  • nginx配置負(fù)載均衡--實(shí)戰(zhàn)項(xiàng)目(適用于輪詢(xún)、加權(quán)輪詢(xún)、ip_hash)

    nginx配置負(fù)載均衡--實(shí)戰(zhàn)項(xiàng)目(適用于輪詢(xún)、加權(quán)輪詢(xún)、ip_hash)

    ????? 博主簡(jiǎn)介 ????云計(jì)算領(lǐng)域優(yōu)質(zhì)創(chuàng)作者 ????華為云開(kāi)發(fā)者社區(qū)專(zhuān)家博主 ????阿里云開(kāi)發(fā)者社區(qū)專(zhuān)家博主 ?? 交流社區(qū): 運(yùn)維交流社區(qū) 歡迎大家的加入! ?? 希望大家多多支持,我們一起進(jìn)步!?? ??如果文章對(duì)你有幫助的話,歡迎 點(diǎn)贊 ???? 評(píng)論 ?? 收藏

    2024年02月08日
    瀏覽(19)
  • springboot業(yè)務(wù)功能實(shí)戰(zhàn)(四)告別輪詢(xún),websocket的集成使用

    springboot業(yè)務(wù)功能實(shí)戰(zhàn)(四)告別輪詢(xún),websocket的集成使用

    org.springframework.boot spring-boot-starter-websocket 加入配置類(lèi) @Configuration public class WebSocketConfig { /** 注入ServerEndpointExporter, 這個(gè)bean會(huì)自動(dòng)注冊(cè)使用了@ServerEndpoint注解聲明的Websocket endpoint */ @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } 加入連接發(fā)送消

    2024年04月15日
    瀏覽(28)
  • 【JavaScript】講解JavaScript的基礎(chǔ)知識(shí)并且配有案例講解

    【JavaScript】講解JavaScript的基礎(chǔ)知識(shí)并且配有案例講解

    ??專(zhuān)欄【?前端易錯(cuò)合集】 ??喜歡的詩(shī)句:更喜岷山千里雪 三軍過(guò)后盡開(kāi)顏。 ??音樂(lè)分享【如愿】 大一同學(xué)小吉,歡迎并且感謝大家指出我的問(wèn)題?? 目錄 ? ??JavaScript嵌入網(wǎng)頁(yè)的方式 ??alert(\\\"這是一個(gè)JavaScript例子\\\"); ????(或者window.alert()) ???document.write(\\\"這是一個(gè)Jav

    2024年02月08日
    瀏覽(49)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包