创建基于Web的实时系统
當創建基于Web的實時系統時,通常我們會使用到以下技術:
輪詢
長連接
長輪詢
Flash Socket
WEB Socket
下面我們對這些技術作個簡單介紹。
?
傳統輪詢(Traditional Polling)
當前Web應用中較常見的一種持續通信方式,通常采取setInterval或者setTimeout實現。例如如果我們想要定時獲取并刷新頁面上的數據,可以結合Ajax寫出如下實現:
setInterval(function() {$.get("/path/to/server", function(data, status) {console.log(data);}); }, 10000);客戶端定時向服務器發送ajax請求,服務器接到請求后馬上返回響應信息并關閉連接。
優點:后端程序編寫比較容易。
缺點:請求中有大半是無用,浪費帶寬和服務器資源。
http 長連接:
目前 http 協議普遍使用的是 1.1 版本, 之前有個 1.0 版本, 兩者之間的一個區別是 1.1 支持 http 長連接, 或者叫持久連接.1.0 不支持 http 長連接, 每次一個 http 請求響應后都關閉 tcp 連接,下個 http 請求會重新建立 tcp 連接。
所謂 http 長連接就是多個 http 請求共用一個 tcp 連接,這樣可以減少多次臨近 http 請求導致 tcp 建立關閉所產生的時間消耗。
通常在頁面里嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設為對一個長連接的請求,服務器端就能源源不斷地往客戶端輸入數據。比如早期的Gmail聊天
優點:消息即時到達,不發無用請求。
缺點:服務器維護一個長連接會增加開銷。
http 長輪詢:
http 長輪詢是服務器收到請求后如果有數據, 立刻響應請求; 如果沒有數據就會 hold 一段時間, 這段時間內如果有數據立刻響應請求; 如果時間到了還沒有數據, 則響應 http 請求;瀏覽器受到 http 響應后立在發送一個同樣 http 請求查詢是否有數據;
客戶端向服務器發送Ajax請求,服務器接到請求后hold住連接,直到有新消息才返回響應信息并關閉連接,客戶端處理完響應信息后再向服務器發送新的請求。
優點:在無消息的情況下不會頻繁的請求。
缺點:服務器hold連接會消耗資源。瀏覽器端對統一服務器同時 http 連接有最大限制, 最好同一用戶只存在一個長輪詢;
服務器端沒有數據 hold 住連接時會造成浪費, 容易產生服務器瓶頸;
實例:WebQQ、Hi網頁版、Facebook IM。
?
Flash Socket:
在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息后控制頁面的顯示。
優點:實現真正的即時通信,而不是偽即時。
缺點:客戶端必須安裝Flash插件;非HTTP協議,無法自動穿越防火墻。
實例:網絡互動游戲。
?
WebSocket
WebSocket是HTML 5規范的組成部分之一。WebSocket相較于上述幾種連接方式,實現原理較為復雜,用一句話概括就是:客戶端向WebSocket服務器通知一個帶有所有接收者ID(recipients IDs)的事件(event),服務器接收后立即通知所有活躍的(active)客戶端,只有ID在接收者ID序列中的客戶端才會處理這個事件。由于WebSocket本身是基于TCP協議的,所以在服務器端我們可以采用構建TCP Socket服務器的方式來構建WebSocket服務器。
優點:實現真正的即時通信,而不是偽即時。
缺點:不是所有瀏覽器都支持(雖然大部分都已經支持)。
?
?
?
?
轉載于:https://www.cnblogs.com/zhumingwu/p/7490341.html
總結
以上是生活随笔為你收集整理的创建基于Web的实时系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis 集合(Set)
- 下一篇: 背水一战 Windows 10 (15)