web端即时通讯
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
comet技術(shù)
瀏覽器作為 Web 應(yīng)用的前臺,自身的處理功能比較有限。瀏覽器的發(fā)展需要客戶端升級軟件,同時由于客戶端瀏覽器軟件的多樣性,在某種意義上,也影響了瀏覽器新技術(shù)的推廣。在 Web 應(yīng)用中,瀏覽器的主要工作是發(fā)送請求、解析服務(wù)器返回的信息以不同的風(fēng)格顯示。AJAX 是瀏覽器技術(shù)發(fā)展的成果,通過在瀏覽器端發(fā)送異步請求,提高了單用戶操作的響應(yīng)性。但 Web 本質(zhì)上是一個多用戶的系統(tǒng),對任何用戶來說,可以認(rèn)為服務(wù)器是另外一個用戶。現(xiàn)有 AJAX 技術(shù)的發(fā)展并不能解決在一個多用戶的 Web 應(yīng)用中,將更新的信息實時傳送給客戶端,從而用戶可能在“過時”的信息下進行操作。而 AJAX 的應(yīng)用又使后臺數(shù)據(jù)更新更加頻繁成為可能。
隨著互聯(lián)網(wǎng)的發(fā)展,web 應(yīng)用層出不窮,也不乏各種網(wǎng)站監(jiān)控、即時報價、即時通訊系統(tǒng),為了讓用戶得到更好的體驗,服務(wù)器需要頻繁的向客戶端推送信息。開發(fā)者一般會采用基于 AJAX 的長輪詢方式或者基于 iframe 及 htmlfile 的流方式處理。當(dāng)然有些程序需要在客戶端安裝各種插件( Java applet 或者 Flash )來支持性能比較良好的“推”信息。
http協(xié)議中的長、短連接
短連接的操作步驟是:建立連接——數(shù)據(jù)傳輸——關(guān)閉連接...建立連接——數(shù)據(jù)傳輸——關(guān)閉連接
長連接的操作步驟是:建立連接——數(shù)據(jù)傳輸...(保持連接)...數(shù)據(jù)傳輸——關(guān)閉連接
長連接與短連接的不同主要在于client和server采取的關(guān)閉策略不同。短連接在建立連接以后只進行一次數(shù)據(jù)傳輸就關(guān)閉連接,? ? 而長連接在建立連接以后會進行多次數(shù)據(jù)數(shù)據(jù)傳輸直至關(guān)閉連接(長連接中關(guān)閉連接通過Connection:closed頭部字段)。
輪詢
輪詢是一種“拉”取信息的工作模式。設(shè)置一個定時器,定時詢問服務(wù)器是否有信息,每次建立連接傳輸數(shù)據(jù)之后,鏈接會關(guān)閉。
長輪詢
只要服務(wù)器斷開連接,客戶端馬上連接,不讓他有一刻的休息時間,這就是長輪詢。
數(shù)據(jù)流
數(shù)據(jù)流方式,在建立的連接斷開之前,也就是 readystate 狀態(tài)為 3 的時候接受數(shù)據(jù),但是麻煩的事情也在這里,因為數(shù)據(jù)正在傳輸,你拿到的 xhr.response 可能就是半截數(shù)據(jù),所以呢,最好定義一個數(shù)據(jù)傳輸?shù)膮f(xié)議,比如前2個字節(jié)表示字符串的長度,然后你只獲取這個長度的內(nèi)容,接著改變游標(biāo)的位置。
在ajax還沒有進入web專題之前,我們已經(jīng)擁有了一個法寶,那就是iframe,利用iframe照樣可以異步獲取數(shù)據(jù),對于低版本IE可以使用iframe開接受數(shù)據(jù)流。
websocket
websocket是前端一個神器,ajax用了這么久了,相關(guān)技術(shù)也是很成熟,不過要實現(xiàn)個數(shù)據(jù)的拉取確實十分不易,從上面的代碼中也看到了,各種兼容性問題,各種細(xì)節(jié)處理問題,自從有了websocket,哈哈,一口氣上五樓.
EventSource
情非得已就別考慮這第六種方式了,雖說兼容性最好,要是不懂a(chǎn)s,出了點bug你也不會調(diào)試。
具體實現(xiàn)方法:在 HTML 頁面中內(nèi)嵌入一個使用了 XMLSocket 類的 Flash 程序。JavaScript 通過調(diào)用此 Flash 程序提供的套接口接口與服務(wù)器端的套接口進行通信。JavaScript 在收到服務(wù)器端以 XML 格式傳送的信息后可以很容易地控制 HTML 頁面的內(nèi)容顯示。
小結(jié)
對于輪詢:這種方式應(yīng)該是最沒技術(shù)含量的,操作起來最方便,不過是及時性不強,把定時器的間隔時間設(shè)置的短一些可以稍微得到緩和。
對于長連接:算是比較不錯的一個web通訊方式,不過每次斷開連接,比較耗服務(wù)器資源,客戶端到無所謂。
對于數(shù)據(jù)流:他和長輪詢不同之處是接受數(shù)據(jù)的時間不一樣,數(shù)據(jù)流是readystate為3的時候接受,低版本IE不太兼容,處理起來略麻煩,而且還要自己設(shè)計數(shù)據(jù)傳輸協(xié)議。不過他對資源的消耗比上面幾種都可觀。
對于websocket與EventSource:只有高級瀏覽器支持
轉(zhuǎn)載于:https://my.oschina.net/bosscheng/blog/344185
總結(jié)
- 上一篇: Linux+Apache2.4+PHP5
- 下一篇: 网络安全系列之三十五 缓冲区溢出