WebSocket說明
WebSocket:是一種網絡傳輸協議,可在單個TCP連接上進行全雙工通信,位於OSI模型的應用層。WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和服務器只需要完成一次握手,兩者之間就可以創建持久性的連接,並進行雙向數據傳輸。
WebSocket協議規范將ws(WebSocket)和wss(WebSocket Secure)定義為兩個新的統一資源標識符(URI)方案,分別對應明文和加密連接。
更多說明可參考如下來自wiki簡介
WebSocket是一種與HTTP不同的協議。兩者都位於OSI模型的應用層,並且都依賴於傳輸層的TCP協議。 雖然它們不同,但是RFC 6455中規定:it is designed to work over HTTP ports 80 and 443 as well as to support HTTP proxies and intermediaries (WebSocket通過HTTP端口80和443進行工作,並支持HTTP代理和中介),從而使其與HTTP協議兼容。 為了實現兼容性,WebSocket握手使用HTTP Upgrade頭,從HTTP協議更改為WebSocket協議。 WebSocket協議支持Web瀏覽器(或其他客戶端應用程序)與Web服務器之間的交互,具有較低的開銷,便於實現客戶端與服務器的實時數據傳輸。 服務器可以通過標准化的方式來實現,而無需客戶端首先請求內容,並允許消息在保持連接打開的同時來回傳遞。 通過這種方式,可以在客戶端和服務器之間進行雙向持續對話。 通信通過TCP端口80或443完成,這在防火牆阻止非Web網絡連接的環境下是有益的。 另外,Comet之類的技術以非標准化的方式實現了類似的雙向通信。 大多數瀏覽器都支持該協議,包括Google Chrome、Firefox、Safari、Microsoft Edge、Internet Explorer和Opera。 與HTTP不同,WebSocket提供全雙工通信。 此外,WebSocket還可以在TCP之上實現消息流。TCP單獨處理字節流,沒有固有的消息概念。 在WebSocket之前,使用Comet可以實現全雙工通信。但是Comet存在TCP握手和HTTP頭的開銷,因此對於小消息來說效率很低。WebSocket協議旨在解決這些問題。 WebSocket協議規范將ws(WebSocket)和wss(WebSocket Secure)定義為兩個新的統一資源標識符(URI)方案,分別對應明文和加密連接。 使用瀏覽器 開發人員工具,比如chrome開發人員可以檢查WebSocket握手以及WebSocket框架。
nginx 代理 wss/ws websocket協議實踐
相比於http協議的 反向代理
wss/ws websocket協議需要額外添加的配置如下已經加黑加粗。
詳細可以參考官方說明:
https://www.nginx.com/blog/websocket-nginx/
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream websocket { server 192.168.100.10:8010; } server { listen 8020; location / { proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; } } }
