當(dāng)前位置:首頁(yè) > 消費(fèi)電子 > 消費(fèi)電子
[導(dǎo)讀]本文在比較傳統(tǒng)的實(shí)時(shí)web通訊技術(shù)與研究HTML5 WebSocket技術(shù)基礎(chǔ)上,通過(guò)研究WebSocket技術(shù)在實(shí)時(shí)WEB通訊中的應(yīng)用,體現(xiàn)出WebSocket在B/S模式中的應(yīng)用優(yōu)勢(shì)與價(jià)值。

1.前言

作為下一代的Web標(biāo)準(zhǔn),HTML5擁有許多引人注目的新特性,如Canvas、本地存儲(chǔ)、多媒體編程接口、WebSocket等,有兩大特點(diǎn):首先,強(qiáng)化Web網(wǎng)頁(yè)的表現(xiàn)性能。其次,追加本地?cái)?shù)據(jù)庫(kù)等Web應(yīng)用的功能。包括HTML、CSS和JavaScript在內(nèi)的一套技術(shù)組合,減少瀏覽器對(duì)于需要插件的豐富性網(wǎng)絡(luò)應(yīng)用服務(wù)(plug-inbasedrich internet application,RIA),如Adobe Flash、Microsoft Silverlight與OracleJavaFX的需求,并且提供更多能有效增強(qiáng)網(wǎng)絡(luò)應(yīng)用的標(biāo)準(zhǔn)集。而有“Web的TCP”支撐的WebSocket在打破了現(xiàn)有的WEB網(wǎng)絡(luò)通訊編程模式,WebSocket使得瀏覽器提供對(duì)Socket的支持成為可能,在瀏覽器和服務(wù)器之間提供了一個(gè)基于TCP連接的雙向通道,使得開(kāi)發(fā)人員可以方便構(gòu)建實(shí)時(shí)Web應(yīng)用。

2.傳統(tǒng)實(shí)時(shí)WEB的通訊技術(shù)

傳統(tǒng)的Web應(yīng)用的信息交互過(guò)程是客戶端通過(guò)瀏覽器發(fā)出一個(gè)請(qǐng)求(Request),服務(wù)器端接收和審核完請(qǐng)求后進(jìn)行處理(Response)并返回結(jié)果給客戶端,然后客戶端瀏覽器將信息呈現(xiàn)出來(lái),這種機(jī)制對(duì)于信息變化不是特別頻繁的應(yīng)用尚能相安無(wú)事,但對(duì)于那些實(shí)時(shí)要求比較高的應(yīng)用來(lái)說(shuō),當(dāng)客戶端瀏覽器準(zhǔn)備呈現(xiàn)服務(wù)器返回的數(shù)據(jù)信息時(shí),信息有可能已經(jīng)過(guò)時(shí)了。保持客戶端和服務(wù)器端的信息同步是實(shí)時(shí)Web應(yīng)用的關(guān)鍵要素。在WebSocket規(guī)范出來(lái)之前,開(kāi)發(fā)人員想實(shí)現(xiàn)實(shí)時(shí)Web應(yīng)用,只能采用如輪詢(Polling)或Comet技術(shù)方案,而Comet則是輪詢技術(shù)的改進(jìn),長(zhǎng)輪詢機(jī)制與流技術(shù)。

輪詢:客戶端以一定的時(shí)間間隔向服務(wù)端發(fā)出請(qǐng)求,以頻繁請(qǐng)求的方式來(lái)保持客戶端和服務(wù)器端的同步。問(wèn)題在于:當(dāng)客戶端以固定頻率向服務(wù)器發(fā)起請(qǐng)求的時(shí)候,服務(wù)器端的數(shù)據(jù)可能并沒(méi)有更新,造成無(wú)謂的網(wǎng)絡(luò)傳輸,屬于低效的實(shí)時(shí)方案。

長(zhǎng)輪詢:長(zhǎng)輪詢是對(duì)定時(shí)輪詢的改進(jìn)和提高,目地是降低無(wú)效的網(wǎng)絡(luò)傳輸。當(dāng)服務(wù)器端沒(méi)有數(shù)據(jù)更新時(shí),連接會(huì)保持一段時(shí)間周期直到數(shù)據(jù)或狀態(tài)改變或者時(shí)間過(guò)期,通過(guò)這種機(jī)制來(lái)減少無(wú)效的客戶端和服務(wù)器間的交互。當(dāng)服務(wù)端數(shù)據(jù)變更非常頻繁時(shí),就和定時(shí)輪詢沒(méi)有本質(zhì)上性能提高。

流:通常在客戶端的頁(yè)面使用一個(gè)隱藏的窗口向服務(wù)端發(fā)出一個(gè)長(zhǎng)連接的請(qǐng)求。服務(wù)器端接到這個(gè)請(qǐng)求后作出回應(yīng)并不斷更新連接狀態(tài)以保證客戶端和服務(wù)器端的連接不過(guò)期。

將服務(wù)器端的信息不斷推向客戶端。但需要針對(duì)不同的瀏覽器設(shè)計(jì)不同的方案來(lái)改進(jìn)用戶體驗(yàn),同時(shí)在并發(fā)比較大的情況下,對(duì)服務(wù)器端的資源是一個(gè)極大的考驗(yàn)。

以上方案只是利用Ajax方式來(lái)模擬實(shí)時(shí)的效果,每次交互都是HTTP的請(qǐng)求和應(yīng)答的過(guò)程,每次都帶有一套完整的HTTP頭信息,增加了傳輸?shù)臄?shù)據(jù)量,在實(shí)際的應(yīng)用中,為了模擬真實(shí)的實(shí)時(shí)效果,需要構(gòu)造兩個(gè)HTTP連接來(lái)模擬客戶端和服務(wù)器之間的雙向通訊,一個(gè)連接用來(lái)處理客戶端到服務(wù)器端的數(shù)據(jù)傳輸,一個(gè)連接用來(lái)處理服務(wù)器端到客戶端的數(shù)據(jù)傳輸,增加編程實(shí)現(xiàn)的復(fù)雜度,同時(shí)增加了服務(wù)器端的負(fù)載,制約了應(yīng)用系統(tǒng)的擴(kuò)展性。

3.HTML 5 WebSocket概念及規(guī)范

WebSocket API是下一代客戶端-服務(wù)器的異步通信方法。取代了單個(gè)的TCP套接字,使用ws或wss協(xié)議,在任意的客戶端和服務(wù)器程序通訊。WebSocket目前由W3C進(jìn)行標(biāo)準(zhǔn)化,已經(jīng)受到Firefox 4、Chrome 4、Opera 10.70以及Safari 5等瀏覽器的支持,在給定的時(shí)間范圍內(nèi)的任意時(shí)刻,相互推送信息。

HTML5 Web Sockets從一個(gè)Web客戶端連接到一個(gè)遠(yuǎn)程端點(diǎn),需要?jiǎng)?chuàng)建WebSocket實(shí)例并為之提供一個(gè)URL來(lái)表示想要連接到的遠(yuǎn)程端點(diǎn)。該規(guī)范定義了ws://以及wss://模式來(lái)分別表示W(wǎng)ebSocket和安全WebSocket連接。一個(gè)WebSocket連接是在客戶端與服務(wù)器之間HTTP協(xié)議的初始握手階段將其升級(jí)到Web Socket協(xié)議來(lái)建立的,其底層仍是TCP/IP連接。

 

 

其中:

WS:表示HTML5 WEB Sockets協(xié)議;

Host:表示服務(wù)器的地址;

Port:表示待鏈接的端口;

WebSocket Server:表示Server請(qǐng)求資源地址。

Web Sockets使用HTTP Upgrade機(jī)制升級(jí)到Web Socket協(xié)議,同時(shí)兼容HTTP的握手機(jī)制,因此HTTP服務(wù)器可以與WebSocket服務(wù)器共享默認(rèn)的HTTP與HTTPS端(80和443)。要建立一個(gè)WebSocket連接,客戶端和服務(wù)器在初次握手的時(shí)候從HTTP協(xié)議提升到Web Socket協(xié)議??蛻舳藶g覽器首先要向服務(wù)器發(fā)起一個(gè)HTTP請(qǐng)求,這個(gè)請(qǐng)求和通常的HTTP請(qǐng)求不同,包含了一些附加頭信息,其中附加頭信息“Upgrade:WebSocket”,表明是一個(gè)申請(qǐng)協(xié)議升級(jí)的HTTP請(qǐng)求,服務(wù)器端解析附加的頭信息,產(chǎn)生應(yīng)答信息返回給客戶端,由此客戶端和服務(wù)器端的WebSocket建立成功,然后通過(guò)鏈接通道自由傳遞信息,并且持續(xù)到客戶端或者服務(wù)器端的單方主動(dòng)關(guān)閉連接。連接建立后,WebSocket數(shù)據(jù)幀以全雙工的模式在客戶端和服務(wù)器之間來(lái)回傳輸。

典型WebSocket請(qǐng)求與響應(yīng)例子如下:

 

 

 

[!--empirenews.page--]

 

其中Sec-WebSocket-Key1,Sec-WebSocket-Key2和[8-byte security key]這幾個(gè)頭信息是WebSocket服務(wù)器用來(lái)生成應(yīng)答信息的來(lái)源,服務(wù)器基于以下的算法來(lái)產(chǎn)生正確的應(yīng)答信息:

a)逐個(gè)字符讀取Sec-WebSocket-Key1頭信息中的值,將數(shù)值型字符連接到一起放到一個(gè)臨時(shí)字符串里,同時(shí)統(tǒng)計(jì)所有空格的數(shù)量;

b)將在第1步里生成的數(shù)字字符串轉(zhuǎn)換成一個(gè)整型數(shù)字,然后除以第1步里統(tǒng)計(jì)出來(lái)的空格數(shù)量,將得到的浮點(diǎn)數(shù)轉(zhuǎn)換成整數(shù)型;

c)將第2步里生成的整型值轉(zhuǎn)換為符合網(wǎng)絡(luò)傳輸?shù)木W(wǎng)絡(luò)字節(jié)數(shù)組;

d)對(duì)Sec-WebSocket-Key2頭信息同樣進(jìn)行第1到第3步的操作,得到另外一個(gè)網(wǎng)絡(luò)字節(jié)數(shù)組;

e)將[8-byte security key]和在第3,第4步里生成的網(wǎng)絡(luò)字節(jié)數(shù)組合并成一個(gè)16字節(jié)的數(shù)組;

f)對(duì)第5步生成的字節(jié)數(shù)組使用MD5算法生成一個(gè)哈希值,這個(gè)哈希值就作為安全密鑰返回給客戶端,以表明服務(wù)器端獲取了客戶端的請(qǐng)求,同意創(chuàng)建WebSocket連接。

服務(wù)端將生成的網(wǎng)絡(luò)字節(jié)數(shù)組和客戶端提交的頭信息里的[8-byte security key]

合并成一個(gè)1 6 位字節(jié)數(shù)組并用M D 5 算法加密,然后將生成的安全密鑰作為應(yīng)答信息返回給客戶端,由此建立雙方的WebSocekt連接通道,實(shí)現(xiàn)WebSocket握手信息的處理邏輯。WbSocket服務(wù)器由兩個(gè)核心類構(gòu)成,一個(gè)是WebSocketServer,另外一個(gè)是SocketConnection.

實(shí)際的開(kāi)發(fā)過(guò)程中,為構(gòu)建Web應(yīng)用,首先需要構(gòu)建WebSocket規(guī)范的服務(wù)器,服務(wù)器端的實(shí)現(xiàn)不受平臺(tái)和開(kāi)發(fā)語(yǔ)言的限制,只需要遵從WebSocket規(guī)范即可。

如果使用的是一個(gè)未加密的WebSocket連接(ws://),在透明的代理服務(wù)器情況下,瀏覽器是不知道代理服務(wù)器的,所以不會(huì)發(fā)送HTTP CONNECT方法。如使用的是加密的WebSocket安全連接(wss://),那么在透明代理服務(wù)器下,瀏覽器不知道代理服務(wù)器,所以不會(huì)發(fā)出HTTPCONNECT方法。然而,因?yàn)榫€上信息是加密的,中間透明代理服務(wù)器會(huì)簡(jiǎn)單的讓加密信息通過(guò),因此就增加了使用加密的WebSocket連接的成功率。

HTML5 WebSocket目的是取代輪詢和Comet技術(shù),使客戶端瀏覽器具備像C/S架構(gòu)下桌面系統(tǒng)的實(shí)時(shí)通訊能力。瀏覽器通過(guò)JavaScript向服務(wù)器發(fā)出建立WebSocket連接的請(qǐng)求,連接建立以后,客戶端和服務(wù)器端就可以通過(guò)TCP連接直接交換數(shù)據(jù)。因?yàn)閃ebSocket連接本質(zhì)上就是一個(gè)TCP連接,所以在數(shù)據(jù)傳輸?shù)姆€(wěn)定性和數(shù)據(jù)傳輸量的大小方面,和輪詢以及Comet技術(shù)比較,具有很大的性能優(yōu)勢(shì)。

4.WebSocket JavaScript接口定義

針對(duì)WebSocket JavaScript客戶端接口定義相對(duì)比較簡(jiǎn)單:

 

 

 

 

其中 URL屬性代表WebSocket服務(wù)器的網(wǎng)絡(luò)地址,協(xié)議通常是“ws”,send方法就是發(fā)送數(shù)據(jù)到服務(wù)器端,close方法就是關(guān)閉連接。除了這些方法,還有一些很重要的事件:

onOpen,onMessage,onError以及onClose.

5.WebSocket應(yīng)用場(chǎng)景

5.1 初始數(shù)據(jù)前臺(tái)展示

初始數(shù)據(jù)通過(guò)后臺(tái)的數(shù)據(jù)推送方法到客戶端,客戶端可以在回調(diào)函數(shù)中收到信息,通過(guò)HTML5組件來(lái)展示這些信息。

5.2 后臺(tái)推送信息,前臺(tái)實(shí)時(shí)更新

增加后臺(tái)推送信息代碼,在后臺(tái)起一個(gè)定時(shí)器,定時(shí)推送產(chǎn)生消息或者清除信息,并將信息推送給所有的客戶端。

5.3 客戶端拖拽節(jié)點(diǎn),同步到其他客戶端

增加拖拽同步,監(jiān)聽(tīng)網(wǎng)內(nèi)所有信息點(diǎn),將節(jié)點(diǎn)位置信息發(fā)送給后臺(tái),后臺(tái)接收到節(jié)點(diǎn)位置信息后,更新后臺(tái)數(shù)據(jù),然后將消息轉(zhuǎn)發(fā)給其他客戶端,實(shí)現(xiàn)信息同步操作。

6.WebSocket應(yīng)用展望

WebSocket作為一個(gè)正在演變中的Web規(guī)范,目前用WebSocket構(gòu)建應(yīng)用程序可能存在一些風(fēng)險(xiǎn)。WebSocket規(guī)范和API存在變動(dòng)的可能,盡管目前存在一些局限性,但WebSocket將會(huì)成為未來(lái)開(kāi)發(fā)實(shí)時(shí)Web應(yīng)用的生力軍。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉