vue封装websocket_有关WebSocket必须了解的知识
一、前言
最近之前時間正好在學習java知識,所以自個想找個小項目練練手,由于之前的ssm系統已經跑了也有大半年了,雖然稀爛,但是功能還是勉強做到了,所以這次準備重構ssm系統,改名為postCode系統(至于為什么前者叫ssm,可能是因為后端java用的是ssm框架吧),這次后端將不會開發兩套,而是主要實現之前沒有實現的單聊功能,由于搭建了多個服務,通信使用的是RabbitMQ,然后把著對消息通信的原理研究寫下了這篇水文,后面會單獨淺談一些RabbitMQ。
二、TCP/IP模型
tcp/ip模型算是大學計算機學科中必學的一段知識,但長時間不接觸,又都還給老師了。
tcp/ip模型是互聯網的基礎,它是一些列協議的總稱,tcp/ip模型又可以劃分為osi七層模型
OSI七層模型TCP/IP概率模型功能TCP/IP協議族應用層應用層文件傳輸、郵件傳輸ftp、smtp表示層數據格式化,代碼轉換,數據加密沒有協議會話層接觸或者建立于別的接口聯系沒有協議傳輸層傳輸層提供端對端的接口TCP、UDP網絡層網絡層為數據包選擇路由IP、ICMP、RIP、OSPF數據鏈路層鏈路層傳輸有地址的幀以及錯誤檢查功能SLIP、CSLIP、PPP、ARP物理層以二進制數據形式在物理媒介上傳輸數據IS02110
2.1、UDP的特點
無連接
UDP無需建立三次握手,而是想要發送數據的時候就可以直接送發送端:將收到應用層的數據增加一個UDP的標識就發送出去了接受端:將UDP協議的標識去掉就傳輸給應用層了
可以單播,多播,廣播
UDP支持一對一、一對多、多對多、多對一的傳輸方式。
不可靠性
通信不需要建立連接,也不需要管對方有沒有收到,而是想發就發,這樣的連接是不安全的
2.2、TCP的特點
面向連接僅支持單播傳輸可靠性
TCP提供全雙工通信(重點重點)
TCP允許通信雙方的應用程序在任何時候都能發送數據,因為TCP連接的兩端都設有緩存,用來臨時存放雙向通信的數據。當然,TCP可以立即發送一個數據段,也可以緩存一段時間以便一次發送更多的數據段(最大的數據段大小取決于MSS)
三、Socket編程
在了解WebSocket編程之前要先了解了解Socket
什么是Socket
- 超詳細文檔
起初應用層的數據到達傳輸層后需要依賴tcp/ip協議族建立tcp連接,然后tcp又需要依賴網絡層的ip協議等,從而產生了不同數據格式依賴不同協議模型的尷尬局面,導致一些列安全和網絡阻塞問題,從而誕生了socket的接口。
socket的誕生是為了應用程序能夠更方便的將數據經由傳輸層來傳輸socket本質上就是對TCP/IP 的運用進行了一層封裝socket并不是協議,而是介于應用層和傳輸層之間抽象出來的一層,是一組接口socket建立連接和斷開連接和普通的tcp連接一樣需要進行三次握手和四次揮手socket可以建立長連接和短連接socket主要是應用在C/S(Client/Server)模式里所有的連接都需要經過socket接口
最后可以簡單的理解為socket對tcp/ip封裝后向應用層提供一些更加方便傳輸數據的接口。
四、WebSocket
因為socket只能是在C/S架構出現,瀏覽器端操作都處于應用層,所以Html5中提出了WebSocket通信協議,為了解決真正意義上的全雙工通信的難題。
建立WebSocket連接前會先發送一個Header里面有Upgrade:Websocket的http請求ws和wss都屬于WebSocket的通信協議,wss和https一樣都只是多了TLS協議
不同網絡通信協議的對應關系
類WebSocketXMLHttpRequest通信協議wshttp通信協議+TLS協議wsshttps
4.1、ScokJS/Socket.IO
ScokJS
ScokJS是一套基于WebSocket Api封裝的js庫,它在瀏覽器和web服務器之間創建了一個低延遲、全雙工、跨域通信通道。Spring框架提供了基于SockJS協議的透明的回退選項;Spring Framework也是SockJS推薦Java Server的實現,同時也提供了Java 的client實現SockJS的一大好處在于提供了瀏覽器兼容性。優先使用原生WebSocket,如果在不支持websocket的瀏覽器中,會自動降為輪詢的方式。因此服務器如果是spring環境,應該優先使用ScokJS
Socket.IO
- 使用文檔
- 原理文檔
Socket.io和ScokJS一樣都是基于WebSocket Api封裝的js庫,同樣也是為了解決部分瀏覽器不支持WebSocket而誕生的js庫。Socket.io本身設計就是提供了一套node環境的全雙工連接,所有在node環境作為服務器使用Socket.io的時候還需要綁定http.Server服務,因為WebSocket協議是構建在HTTP協議之上的因此服務器如果是node環境,應該優先使用Socket.io
4.2、STOMP/vue-socket
雖然ScokJS和Socket.IO都解決了瀏覽器兼容性問題,但是在進行雙向通信的過程中是不遵循任何消息協議的,也就是當消息到達應用層后就只剩消息文本本身了,所以不利于跨平臺和多端通信,于是對應約束消息格式的消息協議的就誕生了。
STOMP
- 使用文檔
STOMP是一種基于幀的協議,幀的結構是效仿HTTP報文格式STOMP可以直接使用WebSocket進行連接,也可以使用SockJS進行連接Stomp.client(url) 通過WebSocket直接連接Stomp.over(ws) 通過sockJS進行連接STOMP更加適合于做于消息組件,其中的方法設計都是可以配合rabbitMQ使用的,只需要在rabbitMQ中安裝rabbitmq_web_stomp和 rabbitmq_web_stomp_examples就可以了
vue-socket
vue-socket和STOMP一樣都是消息協議,vue-socket底層是基于socket.io封裝的js庫,對vue支持會更好。
來源:博客園
作者:買辣椒也用券
鏈接:https://www.cnblogs.com/Juaoie/p/13412752.html
總結
以上是生活随笔為你收集整理的vue封装websocket_有关WebSocket必须了解的知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机内存比外存容量大吗,内存容量一般比
- 下一篇: 两边双虚线是什么意思_行星减速机生产厂家