WebSocket產(chǎn)生背景
簡單的說,WebSocket協(xié)議之前,雙工通信是通過多個http鏈接來實現(xiàn),這導(dǎo)致了效率低下。WebSocket解決了這個問題。下面是標(biāo)準(zhǔn)RFC6455中的產(chǎn)生背景概述。
長久以來, 創(chuàng)建實現(xiàn)客戶端和用戶端之間雙工通訊的web app都會造成HTTP輪詢的濫用: 客戶端向主機不斷發(fā)送不同的HTTP呼叫來進行詢問。
這會導(dǎo)致一系列的問題:
- 1.服務(wù)器被迫為每個客戶端使用許多不同的底層TCP連接:一個用于向客戶端發(fā)送信息,其它用于接收每個傳入消息。
- 2.有些協(xié)議有很高的開銷,每一個客戶端和服務(wù)器之間都有HTTP頭。
- 3.客戶端腳本被迫維護從傳出連接到傳入連接的映射來追蹤回復(fù)。
一個更簡單的解決方案是使用單個TCP連接雙向通信。 這就是WebSocket協(xié)議所提供的功能。 結(jié)合WebSocket API ,WebSocket協(xié)議提供了一個用來替代HTTP輪詢實現(xiàn)網(wǎng)頁到遠(yuǎn)程主機的雙向通信的方法。
WebSocket協(xié)議被設(shè)計來取代用HTTP作為傳輸層的雙向通訊技術(shù),這些技術(shù)只能犧牲效率和可依賴性其中一方來提高另一方,因為HTTP最初的目的不是為了雙向通訊。
WebSocket實現(xiàn)原理
1、tcp協(xié)議的三次握手四次揮手的機制和過程依然存在
2、websocket協(xié)議本身有握手環(huán)節(jié)
3、websocket協(xié)議成功之后收發(fā)數(shù)據(jù)
WebSocket的實現(xiàn)過程如下:
- 客戶端發(fā)起WebSocket連接請求。
- 服務(wù)器響應(yīng)WebSocket連接請求,并完成握手過程。
- 客戶端和服務(wù)器之間建立WebSocket連接。
- 客戶端和服務(wù)器通過WebSocket連接進行雙向通信。
- 當(dāng)客戶端或服務(wù)器想要關(guān)閉WebSocket連接時,可以通過發(fā)送Close幀來關(guān)閉連接。
WebSocket的實現(xiàn)細(xì)節(jié)如下:
- 客戶端通過使用
socket.io
庫或原生WebSocket API來發(fā)起WebSocket連接請求。 - 服務(wù)器需要配置WebSocket服務(wù)器的地址和端口號,并監(jiān)聽WebSocket連接請求。
- 在握手過程中,客戶端和服務(wù)器交換一些數(shù)據(jù),以確定WebSocket連接的參數(shù)。這些數(shù)據(jù)包括Key、Version、SubProtocol等。
- 一旦建立了WebSocket連接,客戶端和服務(wù)器就可以通過WebSocket連接進行雙向通信。通信的數(shù)據(jù)格式為JSON或二進制格式。
- 當(dāng)需要關(guān)閉WebSocket連接時,客戶端或服務(wù)器可以發(fā)送Close幀來關(guān)閉連接。Close幀中包含一個狀態(tài)碼和一個關(guān)閉原因,以告訴對方連接已經(jīng)關(guān)閉。
總之,WebSocket的實現(xiàn)原理是通過建立一個持久的TCP連接,實現(xiàn)客戶端和服務(wù)器之間的雙向通信。其實現(xiàn)過程涉及到握手過程、數(shù)據(jù)傳輸和關(guān)閉連接等步驟。
websocket關(guān)鍵組件
WebSocket協(xié)議的關(guān)鍵組件包括以下幾個:
- WebSocket客戶端:WebSocket客戶端存在于瀏覽器或其他可以運行WebSocket應(yīng)用程序的環(huán)境中。它負(fù)責(zé)發(fā)起WebSocket連接請求,并通過WebSocket連接與服務(wù)器進行通信。
- WebSocket服務(wù)器:WebSocket服務(wù)器是運行WebSocket服務(wù)端的程序,它負(fù)責(zé)響應(yīng)WebSocket連接請求,并與客戶端建立WebSocket連接。WebSocket服務(wù)器可以基于各種不同的平臺和技術(shù)實現(xiàn),如Node.js、Java、C#等。
- WebSocket連接:WebSocket連接是WebSocket客戶端和服務(wù)器之間建立的持久連接,它允許雙方進行雙向通信。一旦連接建立,客戶端和服務(wù)器就可以通過該連接發(fā)送和接收消息。
- WebSocket幀:WebSocket幀是WebSocket連接中傳輸?shù)幕締挝?。它包含了控制信息(如幀類型、幀長度等)和有效載荷數(shù)據(jù)(實際傳輸?shù)臄?shù)據(jù))。WebSocket幀有兩種類型:文本幀和二進制幀。
- WebSocket協(xié)議:WebSocket協(xié)議是一種應(yīng)用層協(xié)議,它基于HTTP協(xié)議,但不需要進行多次握手和響應(yīng)。WebSocket協(xié)議通過TCP連接進行通信,實現(xiàn)了客戶端和服務(wù)器之間的雙向通信。
這些關(guān)鍵組件共同構(gòu)成了WebSocket協(xié)議的基礎(chǔ)結(jié)構(gòu),使得WebSocket成為實時通信的有力工具。文章來源:http://www.zghlxwxcb.cn/news/detail-692491.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-692491.html
到了這里,關(guān)于WebSocket--技術(shù)文檔--架構(gòu)體系--《WebSocket實現(xiàn)原理以及關(guān)鍵組件》的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!