1. 程式人生 > >網路請求-輪詢/長輪詢/websocket - 實現伺服器有更新的化,及時將資料發給使用者

網路請求-輪詢/長輪詢/websocket - 實現伺服器有更新的化,及時將資料發給使用者

- 需求:

使用者前端需要及時的瞭解使用者需要的資訊是否更新,如投票系統,大螢幕需及時的反饋投票變更數

- 分析

想要及時更新螢幕資料,就需要伺服器一旦有更新資料就發給使用者

- 解決方案

1. 輪詢

前端通過js事件setInterval(function, timeout) 來每個多少毫秒執行一次前的函式,函式可以進行ajax請求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</
title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> </head> <body> <div id="text"></div> <script> setInterval(get_data, 2000); function get_data(){ $.ajax({ url: '/xx/', success:function
(data){ $('#text').html(data) } }) } </script> </body> </html>
輪詢只需前端執行即可

缺點:不能實時更新資料,會增加伺服器的IO壓力

2. 長輪詢

前端通過遞迴方法,不斷的向後端傳送ajax請求,後端記錄每個請求並分配一個佇列,利用佇列的特性,當佇列中沒有值時可以阻塞一定時長,再返回錯誤資訊(try),如果有值就可以馬上返回,這樣就可以實現實時更新資料,又能相對輪詢來減輕服務端的壓力。

【前端傳送請求,如果對應的佇列中沒有資料,請求就會被阻塞住,等待設定的時間過去後再給前端傳送更新資料或提示還沒有跟新的資料,前端收到後,遞迴又會繼續執行函式繼續新的請求,從而通過這種方式及時獲取更新資料】