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