通常,打開(kāi)某個(gè)網(wǎng)頁(yè),我們每點(diǎn)擊一次網(wǎng)頁(yè)上的某個(gè)選項(xiàng),前端就會(huì)發(fā)送一次HTTP請(qǐng)求,網(wǎng)站返回一次HTTP響應(yīng)。這種由客戶端主動(dòng)請(qǐng)求,服務(wù)器響應(yīng)的方式滿足大部分網(wǎng)頁(yè)的功能場(chǎng)景。但這種情況下,服務(wù)器不會(huì)主動(dòng)給客戶端發(fā)消息。而類似網(wǎng)頁(yè)游戲這樣的場(chǎng)景,是需要客戶端和服務(wù)器之間互相主動(dòng)發(fā)大量數(shù)據(jù)的。
WebSocket是什么?
WebSocket 是一種用于在單個(gè) TCP 連接上進(jìn)行全雙工通信的網(wǎng)絡(luò)協(xié)議。它使用類似于 HTTP 的握手來(lái)建立連接,然后使用單獨(dú)的持久連接來(lái)進(jìn)行通信。這種方式使得 WebSocket 可以在瀏覽器和服務(wù)器之間進(jìn)行實(shí)時(shí)通信,而不需要多次發(fā)送 HTTP 請(qǐng)求來(lái)獲取數(shù)據(jù)。這意味著連接是持久的,它一直保持打開(kāi),直到有一方主動(dòng)關(guān)閉連接。這使得 WebSocket 非常適合用于實(shí)時(shí)應(yīng)用程序,因?yàn)樗恍枰粩嗟亟⒑完P(guān)閉連接。
WebSocket怎樣建立連接?WebSocket 連接通常在客戶端(例如瀏覽器)和服務(wù)器之間建立??蛻舳税l(fā)送一個(gè) HTTP 請(qǐng)求來(lái)建立連接,然后服務(wù)器返回一個(gè)確認(rèn)消息,表示已建立連接。之后,客戶端和服務(wù)器可以通過(guò)這個(gè)連接進(jìn)行雙向通信。客戶端可以向服務(wù)器發(fā)送消息,服務(wù)器也可以向客戶端發(fā)送消息。消息可以是任意的字節(jié)數(shù)組,并且可以使用任意的格式進(jìn)行編碼。
建立Websocket連接
WebSocket 是一種必不可少的客戶端—服務(wù)器通信工具,需要充分了解其實(shí)用性并避免使用場(chǎng)景才能從其最大潛力中獲益。
WebSocket的實(shí)際用途
最常見(jiàn)的用途是在實(shí)時(shí)應(yīng)用程序開(kāi)發(fā)中,它有助于在客戶端持續(xù)顯示數(shù)據(jù)。由于后端服務(wù)器不斷發(fā)回此數(shù)據(jù),WebSocket 允許在已打開(kāi)的連接中不間斷地推送或傳輸此數(shù)據(jù),使此類數(shù)據(jù)傳輸更快,并利用了應(yīng)用程序的性能。
聊天應(yīng)用程序開(kāi)發(fā)人員在一次性交換、發(fā)布、廣播消息等操作中調(diào)用 WebSocket 。由于使用相同的 WebSocket 連接來(lái)發(fā)送或接收消息,因此通信變得簡(jiǎn)單、輕量、快捷。在進(jìn)行游戲應(yīng)用程序開(kāi)發(fā)的同時(shí),服務(wù)器必須不間斷地接收數(shù)據(jù),而不要求刷新 UI。WebSocket在不影響游戲應(yīng)用程序 UI 的情況下實(shí)現(xiàn)了這一目標(biāo)。
從上述幾個(gè)示例中,我們大概知道了在什么情況下不太適合使用,例如數(shù)據(jù)交互周期很長(zhǎng),甚至幾小時(shí)一次的情況或只需要一次性處理數(shù)據(jù)時(shí),不應(yīng)采用 WebSocket協(xié)議。在這些情況下,使用 HTTP 協(xié)議是一個(gè)明智的選擇。由于 HTTP 和 WebSocket 都用于應(yīng)用程序通信,因此人們常常感到困惑,很難從這兩者中選擇一個(gè)。
WebSocket 與 HTTP 的選擇
WebSocket 是一種框架雙向協(xié)議。與此相反,HTTP 是一種單向協(xié)議,作用于 TCP 協(xié)議之上。由于WebSocket協(xié)議能夠支持不間斷的數(shù)據(jù)傳輸,因此主要用于實(shí)時(shí)應(yīng)用程序開(kāi)發(fā)。HTTP 是無(wú)狀態(tài)的,用于開(kāi)發(fā)RESTful和 SOAP 應(yīng)用程序。SOAP 仍然可以使用 HTTP 來(lái)實(shí)現(xiàn),但是 REST 被廣泛傳播和使用。
在 WebSocket 中,通信發(fā)生在兩端,這使其成為更快的協(xié)議。在 HTTP 中,連接是在一端建立的,這使得它比 WebSocket 有點(diǎn)慢。WebSocket 使用統(tǒng)一的 TCP 連接,需要一方終止連接。在它發(fā)生之前,連接保持活動(dòng)狀態(tài)。HTTP 需要為單獨(dú)的請(qǐng)求建立不同的連接。請(qǐng)求完成后,連接會(huì)自動(dòng)斷開(kāi)。
HTTP 長(zhǎng)輪詢
現(xiàn)今對(duì)網(wǎng)絡(luò)數(shù)據(jù)安全性也存在更多需求,WebSocket 連接使用的是標(biāo)準(zhǔn)的 TCP 連接,因此它可以在任何支持 TCP 的網(wǎng)絡(luò)上使用。它使用的是 ws:// 和 wss:// 協(xié)議前綴,這些前綴可以與任何域名或 IP 地址結(jié)合使用。WebSocket 連接是可以加密的,可以使用 TLS(Transport Layer Security,傳輸層安全)協(xié)議來(lái)保護(hù)數(shù)據(jù)的安全。這種加密連接使用的是 wss:// 協(xié)議前綴,與不加密的連接使用的 ws:// 協(xié)議前綴相區(qū)別。除此之外,WebSocket 還支持安全握手協(xié)議(Secure Handshake Protocol),這使得它可以在瀏覽器和服務(wù)器之間進(jìn)行加密通信??偟膩?lái)說(shuō),WebSocket 具有較高的安全性,可以保護(hù)數(shù)據(jù)的安全。另外,需要注意的是,WebSocket不是基于HTTP的新協(xié)議,因?yàn)閃ebSocket只有在建立連接時(shí)才用到了HTTP,升級(jí)完成之后就跟HTTP不再有任何關(guān)系。
-
Web
+關(guān)注
關(guān)注
2文章
1263瀏覽量
69492 -
HTTP
+關(guān)注
關(guān)注
0文章
505瀏覽量
31242 -
網(wǎng)頁(yè)
+關(guān)注
關(guān)注
0文章
73瀏覽量
19322
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論