成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

websocket 之入門 (一)

myshell / 2579人閱讀

摘要:長輪循長輪循是對定時輪詢的改進(jìn)和提高,目地是為了降低無效的網(wǎng)絡(luò)傳輸。是規(guī)范的一部分,它是一種流技術(shù),它的規(guī)范由兩部分組成,第一個部分是服務(wù)器端與瀏覽器端之間的通訊協(xié)議,第二部分則是在瀏覽器端提供使用的對象。下一篇之客戶端與服務(wù)器端的交互二

1. 長鏈接技術(shù)介紹

說到websocket,必須講到在它之前的各種長鏈接技術(shù),比如輪循,長輪循,sse等。長鏈接顧名思義,就是讓客戶端瀏覽器與服務(wù)器端保持長久的連接,并能持續(xù)通訊,它還有一個特點(diǎn),就是反向ajax,或叫服務(wù)器推技術(shù)。也就是說,服務(wù)器端也能通過這些手段實(shí)現(xiàn)向客戶端推送的技術(shù),比如,在現(xiàn)實(shí)應(yīng)用中,看到的股票數(shù)據(jù)實(shí)時更新,這是通過這種技術(shù)來實(shí)現(xiàn)的。因?yàn)榉?wù)器端無法主動的向客戶端推送數(shù)據(jù),只能通過客戶端連接上服務(wù)器端,然后被動地推送數(shù)據(jù),這些連接到服務(wù)器端或者服務(wù)器端向客戶端發(fā)送數(shù)據(jù)的方法就可以分成很多種,比如最簡單的就是通過ajax隔一段時間發(fā)送http請求。

像輪循,長輪循等技術(shù)并不能實(shí)現(xiàn)真正意義上的實(shí)時,它是模擬型的實(shí)時,它發(fā)送的是完整的http請求。下面來具體說一下每個技術(shù)的特點(diǎn)。

1.1 輪循

輪循,也叫短輪循,英文名也叫Polling。它很簡單,只是用ajax隔一段時間,可能是1秒,2秒,時間自己設(shè)定,向服務(wù)器發(fā)送請求。這種方案會頻繁地與服務(wù)器通訊,每次通訊都是發(fā)送完整的http請求,如果服務(wù)器經(jīng)常有數(shù)據(jù)變動,有回應(yīng)還好,有時候發(fā)送的請求都是沒有意義,都是在等服務(wù)器端的回應(yīng),而服務(wù)器又沒有任何改變,所以這種方式很消耗網(wǎng)絡(luò)資源,很低效。

1.2 長輪循

長輪循是對定時輪詢的改進(jìn)和提高,目地是為了降低無效的網(wǎng)絡(luò)傳輸。這種方式也是通過ajax請求發(fā)送數(shù)據(jù)到服務(wù)器端,服務(wù)器端一直hold住這個連接,直到有數(shù)據(jù)到達(dá),通過這種機(jī)制來減少無效的客戶端和服務(wù)器間的交互,比如可以通過這種方式實(shí)現(xiàn)簡易型的聊天室,但是,如果服務(wù)端的數(shù)據(jù)變更非常頻繁的話,或者說訪問的人非常多的時候,這種機(jī)制和定時輪詢比較起來沒有本質(zhì)上的性能的提高。

1.3 HTML5 服務(wù)器推送事件

英文名也叫HTML5 Server Sent Events (SSE) / EventSource。SSE是html5規(guī)范的一部分,它是一種流技術(shù),它的規(guī)范由兩部分組成,第一個部分是服務(wù)器端與瀏覽器端之間的通訊協(xié)議,第二部分則是在瀏覽器端提供 JavaScript 使用的 EventSource 對象。服務(wù)器端的響應(yīng)的內(nèi)容類型是“text/event-stream”,響應(yīng)文本的內(nèi)容可以看成是一個事件流,它能夠持續(xù)不斷地向服務(wù)器端推送數(shù)據(jù)。不過這種技術(shù)很難跨域,且對IE的支持并不好,但也不能代表這種技術(shù)是沒用或過時的,用它結(jié)合PostgreSQL的notify,或者Redis的pub/sub可以輕易構(gòu)建聊天室。

2. websocket

上述的幾種方法不代表就是過時沒用的,相反,在某一程度上,它們還在應(yīng)用中,只是,現(xiàn)在我們要來介紹一種更為好,更實(shí)時的技術(shù),它叫websocket。它也是一種協(xié)議,它是基于tcp協(xié)議的,它跟http協(xié)議同級,它在瀏覽器層次發(fā)揮作用,可以由http協(xié)議升級為ws協(xié)議,就像是http加個安全通道升級為https協(xié)議一樣。它的原理是這樣的,由于它是一個協(xié)議,它不用發(fā)送跟http同樣多的頭信息,它比較輕量,速度快。為了建立一個 WebSocket 連接,客戶端瀏覽器首先要向服務(wù)器發(fā)起一個 HTTP 請求,這個請求和通常的 HTTP 請求不同,包含了一些附加頭信息,其中附加頭信息”Upgrade: WebSocket”表明這是一個申請協(xié)議升級的 HTTP 請求,服務(wù)器端解析這些附加的頭信息然后產(chǎn)生應(yīng)答信息返回給客戶端,客戶端和服務(wù)器端的 WebSocket 連接就建立起來了,雙方就可以通過這個連接通道自由的傳遞信息,并且這個連接會持續(xù)存在直到客戶端或者服務(wù)器端的某一方主動的關(guān)閉連接。

在github.com或trello.com等應(yīng)用就可以看到websocket的使用。比如,github上的:

請求
Request URL:wss://live.github.com/_sockets/NzQwNjQzOjA4NmI3MGI3ODE2N2JmNGI2OTkwNTI1MzA3NjVjNjYxOjgxYTFjMzVlYTE0NDBkYTUxYjllNTc2NmNjYmE1MDg0ZWY2M2ZiZDQ1NWFmOTM5MWIwMmNlYTMzOGZlYWIwMzY=--46b941101badcb9affe775bd52bf902d4b57468c
Request Method:GET
Status Code:101 Switching Protocols

響應(yīng)頭信息
Response Headers
Connection:Upgrade
Sec-WebSocket-Accept:ihEYOEOsteVV84Y2koOeMRELVT8=
Server:GitHub.com
Upgrade:websocket

請求頭信息
Request Headers
Connection:Upgrade
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:+wcmQ7sbHbIF7K/sGpkOKw==
Sec-WebSocket-Version:13
Upgrade:websocket

本篇完結(jié)。

下一篇:websocket之客戶端與服務(wù)器端的交互(二)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79548.html

相關(guān)文章

  • 慕課網(wǎng)_《Netty入門WebSocket初體驗(yàn)》學(xué)習(xí)總結(jié)

    時間:2018年04月11日星期三 說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com 教學(xué)源碼:https://github.com/zccodere/s... 學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 什么是Netty 高性能、事件驅(qū)動、異步非阻塞的IO Java開源框架 基于NIO的客戶...

    Noodles 評論0 收藏0
  • WebSocket系列基礎(chǔ)知識入門

    摘要:概述本文是系列的第一篇,主要介紹相關(guān)的基礎(chǔ)協(xié)議知識和??蛻舳耸盏巾憫?yīng)后,立即發(fā)起下一次的請求。收到消息通過事件來接收消息。類型則需要傳遞一個對象作為參數(shù),相關(guān)的內(nèi)容也將在本系列第二篇中進(jìn)行介紹。 概述 本文是WebSocket系列的第一篇,主要介紹WebSocket相關(guān)的基礎(chǔ)協(xié)議知識和API。由于WebSocket的相關(guān)介紹在MDN中分布較亂,初學(xué)者不太容易入門,因此通過本文將相關(guān)基礎(chǔ)...

    Yuqi 評論0 收藏0
  • WebSocket系列如何建立和維護(hù)可靠的連接

    摘要:與此同時,后端服務(wù)的中也有相關(guān)的長連接維持時長設(shè)置。如何快速的恢復(fù)連接根據(jù)上面的操作方案,我們會在網(wǎng)絡(luò)異常時斷開連接。 概述 通過前四篇博客,相信讀者對于WebSocket的使用和數(shù)據(jù)(不論是ArrayBuffer還是String)傳輸都有了一個深刻的了解?,F(xiàn)在我們來介紹下,我在使用WebSocket時,連接相關(guān)模塊遇到的一些共性問題,以及我們?nèi)绾谓鉀Q這些問題。 本文作為WebSock...

    BetaRabbit 評論0 收藏0
  • WebSocket系列二進(jìn)制數(shù)據(jù)設(shè)計與傳輸

    摘要:本文作為系列的第四篇內(nèi)容,將會用一個簡單的聊天應(yīng)用把整個傳輸二進(jìn)制數(shù)據(jù)類型的內(nèi)容連接起來,讓用戶對整個傳輸二進(jìn)制數(shù)據(jù)的方法有個了解。如何發(fā)送二進(jìn)制數(shù)據(jù)通過如何設(shè)計一個二進(jìn)制協(xié)議一章,我們知道了如何定義傳輸?shù)亩M(jìn)制數(shù)據(jù)格式。 概述 通過前三篇博客,我們能夠了解在通過WebSocket發(fā)送數(shù)據(jù)之前,我們需要傳遞的數(shù)據(jù)是如何變成ArrayBuffer二進(jìn)制數(shù)據(jù)的;在我們收到二進(jìn)制數(shù)據(jù)之后,我...

    amc 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<