ajax的輪詢和長輪詢

2022-01-21 18:33:10 字數 1298 閱讀 3844

概念:

輪詢(polling):客戶端按規定時間定時像服務端傳送ajax請求,伺服器接到請求後馬上返回響應資訊並關閉連線。

概念總是枯燥的,只有**方能解心頭之快

前段**:index.html:

服務端php**:server.php

<?php

$conn = mysqli_connect("localhost","root","","test");

$resource = $conn ->query('select * from t');

$result = $resource->fetchall();

if ($result)

print_r(json_encode(array('failed'=>'不存在資料')));

$conn.close

?>

上面就是最基本最簡化的ajax輪詢。判斷t表是否有資料,並執行對應輸出。 實際專案中的話查詢語句就根據實際需求來定就可以了。

從**我們可以看出,客戶端是按照規定時間(這個時間由你設定,此處預設為1秒)像服務端傳送請求,前一次請求完成後,無論有無結果返回,一秒之後下一次請求又會發出。這就叫做ajax輪詢。

最關鍵的地方在於,客戶端需要通過js設定乙個定時器,按照規定時間不斷的請求。

好,輪詢完了,我們來看一下長輪詢

ajax長輪詢屬於ajax輪詢的公升級版,在客戶端和服務端都進行了一些改造,使得消耗更低,速度更快。

"不間斷的通過ajax查詢服務端"。

同樣看**說話:

前端**:

服務端**:

<?php

//這段ajax請求時間永不過期

set_time_limit(0);

$pdo = new pdo('mysql:dbname=test;host=127.0.0.1','root','root');

$resource = $pdo->query('select * from t1');

$result = $resource->fetchall();

while (true)

//資料不存在,繼續迴圈。

}?>

長輪詢的精髓就在於ajax的**函式,繼續再次呼叫ajax請求(不間斷的原理就在這裡,成功返回後立即再次呼叫):

$.ajax(getting);

類似於js裡面的遞迴,在函式裡面呼叫函式;

最關鍵的地方在於前一次請求結束後,第二次請求立即不間斷的發起,這個就叫做ajax長輪詢

輪詢和長輪詢

輪詢 輪詢就是第隔n秒訪問一次伺服器 長輪詢 訪問一次伺服器時間比較長,如20秒,並且如果有資料返回則立馬結束 輪詢 輪詢結束 長輪詢開始 佇列模擬長輪詢,佇列等待10秒 長輪詢結束 def put data request que.put 隨便放一此資料 return httpresponse 已...

輪詢 長輪詢

輪詢 通過setinterval向後台請求資料,更新html from flask import flask,render template,request,jsonify users 2 3 user list defuser list import time return render temp...

輪詢,長輪詢,Websocket

原理 利用ajax定時朝後端傳送請求,比如每隔五秒鐘發一次請求,那麼你的資料延遲就可能會高達五秒 特點 資料延遲,消耗資源過大,請求次數太多 原理 利用ajax 佇列 定時朝後端傳送請求,如果沒有資料則會阻塞但是不會一直阻塞,比如阻塞你30秒,還沒有資料則返回,然後讓客戶端瀏覽器再次傳送請求資料的請...