python學習筆記--web即時通訊
所謂 Web 即時通訊,就是說我們可以通過一種機制在網頁上立即通知使用者一件事情的發生,是不需要使用者重新整理網頁的。Web 即時通訊的用途有很多,比如實時聊天,即時推送等。如當我們在登陸瀏覽知乎時如果有人回答了我們的問題,知乎就會即時提醒我們,再比如現在電子商務的線上客服功能。這些能大大提高使用者體驗的功能都是基於 Web 即時通訊實現的。
普通 HTTP流程
客戶端從伺服器端請求網頁
伺服器作出相應的反應
伺服器返回相應到客戶端
而由於 HTTP 請求是無狀態的,也就是說每次請求完成後,HTTP 連結就斷開了,伺服器和瀏覽器互相之間是完全不可知的,只有下一次再發起一次請求才能更新相應的資訊。談到這裡我們就不難想到,我們可以簡單的讓瀏覽器每隔一個週期就發起一次請求,這樣就能在一定程度上模擬實時效果了,這也就是輪詢,術語叫做Polling。
Polling流程
客戶端使用普通的 http 方式向伺服器端請求網頁
客戶端執行網頁中的 JavaScript 輪詢指令碼,定期迴圈的向伺服器傳送請求(例如每 5 秒傳送一次請求),獲取資訊
伺服器對每次請求作出響應,並返回相應資訊,就像正常的 http 請求一樣
通過輪訓的方式我們就可以相對即時的獲取資訊。但是由於輪訓的原理是使瀏覽器頻繁的向伺服器發起請求,這在一定程度上會造成效能效率問題。為了優化這些效能問題,人們又想到了一種方法。那就是在伺服器接收到請求的時候不理解返回,而是隻有當有資料變化(或者超時)的時候才返回。這樣一來,我們就可以利用一次請求最大可能的保持連線的有效性,大大的減少了Polling中的請求次數。這個方法叫做長輪詢,也叫做Long-Polling。
Long-Polling流程
客戶端使用普通的 http 方式向伺服器端請求網頁
客戶端執行網頁中的 JavaScript 指令碼,向伺服器傳送資料、請求資訊
伺服器並不是立即就對客戶端的請求作出響應,而是等待有效的更新
當資訊是有效的更新時,伺服器才會把資料推送給客戶端
當客戶端接收到伺服器的通知時,立即會傳送一個新的請求,進入到下一次的輪詢
以上方法是實現 Web 實時通訊的常用方法。當然在 HTML5 出來之後,我們就有更好的選擇啦。在 HTML5 中,我們可以使用SSE或者是WebSocket。SSE的全稱是Server Send Event,聽名字就很好理解啦。也就是由伺服器來推送資料。看到這裡是不是興奮呢?其實很多情況下,我們只需要這種簡單的功能:由伺服器推送資料到瀏覽器。比如推送比賽資訊、股價的變化等等。
Server Send Event流程
客戶端使用普通的 http 方式向伺服器端請求網頁
客戶端執行網頁中的 JavaScript 指令碼,與伺服器之間建立了一個連線
當伺服器端有更新時,會傳送一個事件到客戶端
如果SSE還不能滿足我們的需求的話,我們完全就可以使用WebSocket啦。當使用WebSocket時,瀏覽器和伺服器之間就建立了一個全雙工通道,互相都可以傳送訊息,完全的做到了及時,就像使用tcp socket一樣。
SSE和WebSocket的簡單對比:
WebSocket 是全雙工通道,可以雙向通訊,功能更強;SSE 是單向通道,只能伺服器向瀏覽器端傳送。
WebSocket 是一個新的協議,需要伺服器端支援;SSE 則是部署在 HTTP 協議之上的,現有伺服器軟體都支援。
SSE 是一個輕量級協議,相對簡單;WebSocket 是一種較重的協議,相對複雜。
到這裡我們就基本瞭解了一些事先 Web 實時通訊的機制,下一節中,我們將使用SSE實現一個簡單的線上聊天室。
相關文章
- Android學習筆記--基於XMPP的即時通訊Android筆記
- WEB 即時通訊最佳實踐Web
- 即時通訊
- 【學習筆記】OpenMV與arduino通訊筆記UI
- “React元件間通訊”學習筆記React元件筆記
- 《通訊原理基礎》學習筆記(1)筆記
- 即時通訊技術文集(第13期):Web端即時通訊技術精華合集 [共15篇]Web
- Adaptive AUTOSAR 學習筆記 12 - 通訊管理APT筆記
- 3|程式間通訊--有名管道學習筆記筆記
- Android學習筆記之藍芽通訊...Android筆記藍芽
- Python Web 開發學習 - 學習筆記(2)- 啟動PythonPythonWeb筆記
- iOS:即時通訊之iOS
- 開源 即時通訊 ?
- 【Web】Web 階段學習筆記Web筆記
- 史上最全Web端即時通訊技術原理詳解Web
- koa-socket即時通訊
- 小程式即時通訊demo
- iOS流式即時通訊教程iOS
- xmpp即時通訊詳解
- 十分鐘學會websocket原理(即時訊息通訊)Web
- 【Web技術學習】PHP學習筆記WebPHP筆記
- Web基礎學習筆記Web筆記
- Web Bundles 學習筆記Web筆記
- Web之http學習筆記WebHTTP筆記
- 前端日拱一卒D7——WEB即時通訊前端Web
- CANopen學習筆記(二)通訊物件PDO和SDO等筆記物件
- 即時通訊和即時通訊的區別是什麼,都有什麼特點?
- 【學習筆記】python筆記Python
- Python學習筆記Python筆記
- RT-Thread學習筆記3-執行緒間通訊 & 定時器thread筆記執行緒定時器
- 音視訊即時通訊解決方案
- eddChat即時通訊(聊天系統)
- [場景設計]即時通訊
- Python學習筆記(隨筆)Python筆記
- 一套簡單的web即時通訊——第二版Web
- 即時通訊視訊聊天原理是什麼
- Android程式間通訊(複習筆記)Android筆記
- python學習筆記4Python筆記