實時的、雙向的;
通過單一的TCP提供了持久化連接;
優勢:
實時、雙向、可以減少網絡的負載;
劣勢:
需要客戶端和服務端雙方都支持;
連續地保持連接需要占用一些內存和CPU資源;
安全問題:安全性顯著弱于同等配置的HTTP/REST API(因長連接的特性放大攻擊面),需要組合使用WSS+Origin校驗+消息認證+內容過濾實
基本概念:
基于TCP協議;
客戶端發送一個WebSocket連接請求,之后服務端也反饋一個協議響應以確認要求。在這個握手期間,客戶端和服務端會協商好使用的協議版本、支持的子協議、支持的擴展選項等等。握手完成后,連接會保持打開的狀態。支持的文件數據格式包括了二進制數據和文本數據。
特點就是實時、雙向、可靠、持久。
用于在線游戲、實時聊天。
生命周期:
連接建立:客戶端發送一個請求,服務端響應一個握手,然后連接就建立了;
?
連接開放:連接建立并且開放,客戶端和服務端之間可以相互發送數據;
?
連接關閉:可以是被服務端或者客戶端發起的一個關閉幀來關閉連接;
?
連接關閉完成:WebSocket的連接完全關閉。
注意:WebSocket連接在任何時候都有可能關閉,如遇網絡故障、服務端崩潰。
消息格式:
文本或二進制數據;
消息構成是消息頭+消息體。
性能:
雙向通信性能更好:使用單一的TCP連接;
更小的網絡流量:與HTTP相比,WebSocket的協議需要更少的網絡流量維護連接,因為它不需要再每個請求/響應交換中發送頭部信息;
更低的延遲:WebSocket協議允許服務器主動向客戶端推送消息,而不需要客戶端先發送消息;
更好的服務端資源管理:WebSocket可以保持持續活動的連接狀態,服務端可以更好地管理客戶端的連接,減少服務端的開銷和處理時間。
如何優化WebSocket的性能:
減少消息的大小:WebSocket傳輸的數據大小對性能有很大的影響,盡可能使用二進制傳輸協議來代替文本傳輸,或者用壓縮算法對消息進行壓縮;
使用CDN(內容分發網絡)加速:可以將靜態資源緩存到離用戶更近的節點上,提高傳輸速度和性能,CDN可以緩存WebSocket的初始握手,避免不必要的網絡延遲;
使用負載均衡:通過使用負載均衡實現分配并平衡多個服務器的負載,避免單個服務器過載,同時也提高了服務的伸縮性;
優化服務端代碼:WebSocket服務端代碼的性能時關鍵因素,使用高效的框架和算法可以減少資源占用而提升速度;
避免網絡阻塞:WebSocket會受到網絡阻塞的影響,當有太多的數據連接同時請求時,服務器性能會下降,使用更合適的線程池和異步IO操作可以避免線程阻塞,提高WebSocket的并發性能。
本文是個人對于
萬字詳解,帶你徹底掌握 WebSocket 用法(至尊典藏版)寫的不錯_websocket用法-CSDN博客
的學習總結。