現在確實有不少這樣的場景,當後臺數據發生變化,需要主動“通知”前臺進行頁面刷新,實現方案有這麽幾種:
輪詢
很容易理解,實現起來也非常簡單的壹種方法:客戶端每隔壹段時間向後臺發送壹次請求,把最新的數據取回來。
當然缺點也比較明顯,如果定時任務的時間設置比較長,那麽數據更新和展示會不及時;如果定時任務的時間設置的比較短,那麽頻繁地訪問後臺,也會增加後臺服務器的壓力。
長輪詢
如果是輪詢的話,客戶端每次向後臺請求數據的時候,都會建立壹次連接;而長輪詢,客戶端發送請求給服務器之後,如果有最新數據的話,就直接返回,如果沒有最新數據的話,就等待,當有新數據的時候再返回。
缺點也顯而易見,因為保持連接也是會消耗資源的,並且如果長時間沒有新數據的話,也會發生超時。
Iframe
這個方式的本質是基於Iframe的HTTP長連接實現;在HTML頁面裏嵌入壹個隱_的Iframe,然後把src屬性設為壹個長連接請求,服務器就可以向Iframe傳輸數據了。
維護長鏈接就需要增加開銷,而且需要考慮連接中斷、重連等問題。
WebSocket
HTTP協議的不足,在於HTTP協議只能由客戶端發起請求,並且壹個Request要對應壹個Response(長鏈接也是如此)。
WebSocket,是要在客戶端和服務器之間,建立壹個通道,建立壹個真的長鏈接;壹旦確立WebSocket通信連接,不論服務器還是客戶端,任意壹方都可直接向對方發送數據,這個是真正意義的雙向通信;並且數據格式可以是文本,也可以是二進制數據。
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到妳的關註。