国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

flask-socketio實(shí)現(xiàn)WebSocket的方法

2020-02-15 22:36:51
字體:
供稿:網(wǎng)友

【flask-socektio】

之前不知道在哪個(gè)場合下提到過如何從web后臺向前臺推送消息。聽聞了反向ajax技術(shù)這種模式之后,大呼神奇,試了一下之后發(fā)現(xiàn)也確實(shí)可以用。不過,反向ajax的代價(jià)也很明顯,只要客戶端還和服務(wù)端要有信息交互,服務(wù)端就必須還維持客戶端的這個(gè)請求,然后在合適的時(shí)候返回。當(dāng)客戶端一多,這么做的成本會比較大。

其他的后端推前端的技術(shù)還有類似于隱藏frame,Comet、長輪詢等等,沒有詳細(xì)了解過,總之也是各有千秋但也各有利弊。

前不久在開發(fā)中碰到了這樣一個(gè)場景,就是在后臺執(zhí)行一些代碼,然后會根據(jù)執(zhí)行的最新情況推送一些提示信息到前臺讓用戶可以知道目前執(zhí)行到哪一步了。典型就是一個(gè)后臺向前端推送消息的,而且是比較簡單的一個(gè)場景。用反向ajax的話好像略顯累贅,因?yàn)橄⒌念l度還是蠻高的,應(yīng)該會消費(fèi)不少網(wǎng)絡(luò)資源,而且ajax請求的url后執(zhí)行的程序肯定和后臺的工作程序是并行的,如果要獲得工作程序的進(jìn)度信息可能還會涉及到進(jìn)程間通信問題,總之各種麻煩。最好能找到一種解決方案,可以在后臺隨時(shí)推送數(shù)據(jù)后在前臺實(shí)時(shí)展示并且允許后臺程序繼續(xù)跑的。

然后找了下就找到了websocket這種html5之后才有的技術(shù)。另外再找了下發(fā)現(xiàn)了flask-socketio這個(gè)拓展模塊添加了flask對websocket的支持。

概述

websocket是html5中實(shí)現(xiàn)了服務(wù)端和客戶端進(jìn)行雙向文本或二進(jìn)制數(shù)據(jù)通信的一種新協(xié)議,其實(shí)已經(jīng)低于HTTP協(xié)議本身和HTTP本質(zhì)上沒有什么關(guān)系了。不過形式上兩者還是有想象之處。因此websocket的連接地址是長這樣的:ws://localhost:8080。可以看到,協(xié)議修飾符不是http了。

另外,websocket在連接建立階段是通過HTTP的握手方式進(jìn)行的,這可以看做是為了兼容瀏覽器或者使用一些現(xiàn)成的功能來實(shí)現(xiàn),這樣一種捷徑。當(dāng)連接建立之后,客戶端和服務(wù)端之間就不再進(jìn)行HTTP通信了,所有信息交互都由websocket接管。

從資源占用的角度上來說,其實(shí)websocket比ajax占用的資源更多,但它真正實(shí)現(xiàn)了全雙工通信這一點(diǎn)還是很理想的,意味著無論是前端還是后臺的信息交互程序編寫都會變得更加方便。由于采用了新的協(xié)議,所以我們也需要適當(dāng)?shù)馗脑煜虑昂笈_的程序。

前端ws編寫以及socket.io.js

由于是比較新的東西,并不一定所有的瀏覽器都支持,所有可以用:

if ('WebSocket' in window){ websocket = new WebSocket('ws://localhost:8080');}

這樣的方式來判斷是否支持,只有支持的情況下才開始websocket處理

其實(shí)光實(shí)現(xiàn)雙向通信是并沒有什么用的,主要還是在通信過程中,讓前后端發(fā)生一些動作,這就需要添加監(jiān)聽事件。在前端這里,我們可以給websocket這個(gè)對象的一些監(jiān)聽回調(diào)接口賦值,來規(guī)定在不同的場合下前端做些不同的事情。比如:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 梅河口市| 梓潼县| 孝感市| 青川县| 远安县| 宜宾县| 南木林县| 天柱县| 衡水市| 呼玛县| 焦作市| 白朗县| 金溪县| 华坪县| 甘谷县| 德格县| 中西区| 鄢陵县| 垣曲县| 札达县| 桃园县| 保靖县| 新干县| 柞水县| 泰州市| 雷州市| 宁乡县| 呈贡县| 甘德县| 稷山县| 石泉县| 德江县| 孟村| 石阡县| 建瓯市| 津南区| 枣庄市| 沾益县| 梓潼县| 南丰县| 陵川县|