python學習筆記--web即時通信

所謂 Web 即時通信斟珊,就是說我們可以通過一種機制在網(wǎng)頁上立即通知用戶一件事情的發(fā)生,是不需要用戶刷新網(wǎng)頁的富纸。Web 即時通信的用途有很多囤踩,比如實時聊天,即時推送等晓褪。如當我們在登陸瀏覽知乎時如果有人回答了我們的問題堵漱,知乎就會即時提醒我們,再比如現(xiàn)在電子商務的在線客服功能涣仿。這些能大大提高用戶體驗的功能都是基于 Web 即時通信實現(xiàn)的勤庐。

普通 HTTP流程

客戶端從服務器端請求網(wǎng)頁

服務器作出相應的反應

服務器返回相應到客戶端

而由于 HTTP 請求是無狀態(tài)的,也就是說每次請求完成后好港,HTTP 鏈接就斷開了愉镰,服務器和瀏覽器互相之間是完全不可知的,只有下一次再發(fā)起一次請求才能更新相應的信息钧汹。談到這里我們就不難想到丈探,我們可以簡單的讓瀏覽器每隔一個周期就發(fā)起一次請求,這樣就能在一定程度上模擬實時效果了拔莱,這也就是輪詢碗降,術語叫做Polling隘竭。

Polling流程

客戶端使用普通的 http 方式向服務器端請求網(wǎng)頁

客戶端執(zhí)行網(wǎng)頁中的 JavaScript 輪詢腳本,定期循環(huán)的向服務器發(fā)送請求(例如每 5 秒發(fā)送一次請求)遗锣,獲取信息

服務器對每次請求作出響應货裹,并返回相應信息,就像正常的 http 請求一樣

通過輪訓的方式我們就可以相對即時的獲取信息精偿。但是由于輪訓的原理是使瀏覽器頻繁的向服務器發(fā)起請求弧圆,這在一定程度上會造成性能效率問題。為了優(yōu)化這些性能問題笔咽,人們又想到了一種方法搔预。那就是在服務器接收到請求的時候不理解返回,而是只有當有數(shù)據(jù)變化(或者超時)的時候才返回叶组。這樣一來拯田,我們就可以利用一次請求最大可能的保持連接的有效性,大大的減少了Polling中的請求次數(shù)甩十。這個方法叫做長輪詢船庇,也叫做Long-Polling。

Long-Polling流程

客戶端使用普通的 http 方式向服務器端請求網(wǎng)頁

客戶端執(zhí)行網(wǎng)頁中的 JavaScript 腳本侣监,向服務器發(fā)送數(shù)據(jù)鸭轮、請求信息

服務器并不是立即就對客戶端的請求作出響應,而是等待有效的更新

當信息是有效的更新時橄霉,服務器才會把數(shù)據(jù)推送給客戶端

當客戶端接收到服務器的通知時窃爷,立即會發(fā)送一個新的請求,進入到下一次的輪詢

以上方法是實現(xiàn) Web 實時通信的常用方法姓蜂。當然在 HTML5 出來之后按厘,我們就有更好的選擇啦。在 HTML5 中钱慢,我們可以使用SSE或者是WebSocket逮京。SSE的全稱是Server Send Event,聽名字就很好理解啦束莫。也就是由服務器來推送數(shù)據(jù)造虏。看到這里是不是興奮呢麦箍?其實很多情況下,我們只需要這種簡單的功能:由服務器推送數(shù)據(jù)到瀏覽器陶珠。比如推送比賽信息挟裂、股價的變化等等。

Server Send Event流程

客戶端使用普通的 http 方式向服務器端請求網(wǎng)頁

客戶端執(zhí)行網(wǎng)頁中的 JavaScript 腳本揍诽,與服務器之間建立了一個連接

當服務器端有更新時诀蓉,會發(fā)送一個事件到客戶端

如果SSE還不能滿足我們的需求的話栗竖,我們完全就可以使用WebSocket啦。當使用WebSocket時渠啤,瀏覽器和服務器之間就建立了一個全雙工通道狐肢,互相都可以發(fā)送消息,完全的做到了及時沥曹,就像使用tcp socket一樣份名。

SSE和WebSocket的簡單對比:

WebSocket 是全雙工通道,可以雙向通信妓美,功能更強僵腺;SSE 是單向通道,只能服務器向瀏覽器端發(fā)送壶栋。

WebSocket 是一個新的協(xié)議辰如,需要服務器端支持;SSE 則是部署在 HTTP 協(xié)議之上的贵试,現(xiàn)有服務器軟件都支持琉兜。

SSE 是一個輕量級協(xié)議,相對簡單毙玻;WebSocket 是一種較重的協(xié)議豌蟋,相對復雜。

到這里我們就基本了解了一些事先 Web 實時通信的機制淆珊,下一節(jié)中夺饲,我們將使用SSE實現(xiàn)一個簡單的在線聊天室。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末施符,一起剝皮案震驚了整個濱河市往声,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戳吝,老刑警劉巖浩销,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異听哭,居然都是意外死亡慢洋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門陆盘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來普筹,“玉大人,你說我怎么就攤上這事隘马√溃” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵酸员,是天一觀的道長蜒车。 經常有香客問我句旱,道長蒂阱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮夹厌,結果婚禮上与学,老公的妹妹穿的比我還像新娘丰泊。我一直安慰自己喷户,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布棘伴。 她就那樣靜靜地躺著寞埠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焊夸。 梳的紋絲不亂的頭發(fā)上仁连,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音阱穗,去河邊找鬼饭冬。 笑死,一個胖子當著我的面吹牛揪阶,可吹牛的內容都是我干的昌抠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鲁僚,長吁一口氣:“原來是場噩夢啊……” “哼炊苫!你這毒婦竟也來了?” 一聲冷哼從身側響起冰沙,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侨艾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拓挥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唠梨,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年侥啤,在試婚紗的時候發(fā)現(xiàn)自己被綠了当叭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡盖灸,死狀恐怖蚁鳖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情赁炎,我是刑警寧澤才睹,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響琅攘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜松邪,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一坞琴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗抑,春花似錦剧辐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至褂傀,卻和暖如春忍啤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仙辟。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工同波, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠国。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓未檩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粟焊。 傳聞我的和親對象是個殘疾皇子冤狡,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容