怎么在vue中使用SockJS實現(xiàn)與webSocket進(jìn)行通信-創(chuàng)新互聯(lián)

本篇文章為大家展示了怎么在vue中使用SockJS實現(xiàn)與webSocket進(jìn)行通信,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到望江網(wǎng)站設(shè)計與望江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋望江地區(qū)。

socksjs

?客戶端和服務(wù)器端api盡可能簡潔,盡量靠近websocket api
?支持服務(wù)端擴(kuò)展和負(fù)載均衡技術(shù)
?傳輸層應(yīng)該全面支持跨域通信
?如果受到代理服務(wù)器的限制,傳輸層能優(yōu)雅地從一種方式回退到另一種方式
?盡可能快地建立連接
?客戶端只是純粹的JavaScript,不需要flash
?客戶端JavaScript必須經(jīng)過嚴(yán)格的測試
?服務(wù)器端代碼盡可能簡單,降低用另一種語言重寫server的代價

前提

要進(jìn)行文章中的代碼的測試,需要服務(wù)端端開發(fā)人員配合你,提供相關(guān)的通信接口.來完成客戶端和服務(wù)端的通信.實現(xiàn)通信,我們需要用到另個模塊 sockjs-client 模塊和 stomjs 模塊,接下來我會先對這兩個模塊做一個簡單的介紹.

關(guān)于實時通信

實現(xiàn)實時通信,我們通常有三種方法:

ajax輪詢 ajax輪詢的原理非常簡單,讓瀏覽器每隔幾秒就像服務(wù)器發(fā)送一個請求,詢問服務(wù)器是否有新的信息.

http 長輪詢 長輪詢的機(jī)制和ajax輪詢差不多,都是采用輪詢的方式,不過才去的是阻塞模型(一直打電話,沒收到就不掛電話),也就是說,客戶端發(fā)起鏈接后,如果沒有消息,就一直不返回response給客戶端.知道有新的消息才返回,返回完之后,客戶端再此建立連接,周而復(fù)始.

WebSocket WebSocket是HTML5開始提供的一種在單個TCP連接上進(jìn)行全雙工通訊的協(xié)議.在WebSocket API中,瀏覽器和服務(wù)器只需要做一個握手的動作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送,不需要繁瑣的詢問和等待. 從上面的介紹很容易看出來,ajax輪詢和長輪詢都是非常耗費資源的,ajax輪詢需要服務(wù)器有很快的處理速度和資源,http長輪詢需要有很高的并發(fā),也就是同時接待客戶的能力.而WebSocket,只需要經(jīng)過一次HTTP請求,就可以與服務(wù)端進(jìn)行源源不斷的消息收發(fā)了.

sockjs-client

sockjs-client 是從SockJS中分離出來的用于客戶端使用的通信模塊.所以我們就直接來看看SockJS. SockJS是一個瀏覽器的JavaScript庫,它提供了一個類似于網(wǎng)絡(luò)的對象,SockJS提供了一個連貫的,跨瀏覽器的JavaScriptAPI,它在瀏覽器和Web服務(wù)器之間創(chuàng)建了一個低延遲,全雙工,跨域通信通道. 你可能會問,我為什么不直接用原生的WebSocket而要使用SockJS呢?這得益于SockJS的一大特性,一些瀏覽器中缺少對WebSocket的支持,因此,回退選項是必要的,而Spring框架提供了基于SockJS協(xié)議的透明的回退選項。SockJS提供了瀏覽器兼容性,優(yōu)先使用原生的WebSocket,如果某個瀏覽器不支持WebSocket,SockJS會自動降級為輪詢.

stomjs

STOMP(Simple Text-Orientated Messaging Protocol) 面向消息的簡單文本協(xié)議; WebSocket是一個消息架構(gòu),不強制使用任何特定的消息協(xié)議,它依賴于應(yīng)用層解釋消息的含義. 與HTTP不同,WebSocket是處在TCP上非常薄的一層,會將字節(jié)流轉(zhuǎn)化為文本/二進(jìn)制消息,因此,對于實際應(yīng)用來說,WebSocket的通信形式層級過低,因此,可以在 WebSocket 之上使用STOMP協(xié)議,來為瀏覽器 和 server間的 通信增加適當(dāng)?shù)南⒄Z義。

STOMP與WebSocket 的關(guān)系:

  • HTTP協(xié)議解決了web瀏覽器發(fā)起請求以及web服務(wù)器響應(yīng)請求的細(xì)節(jié),假設(shè)HTTP協(xié)議不存在,只能使用TCP套接字來編寫web應(yīng)用,你可能認(rèn)為這是一件瘋狂的事情;

  • 直接使用WebSocket(SockJS)就很類似于使用TCP套接字來編寫web應(yīng)用,因為沒有高層協(xié)議,就需要我們定義應(yīng)用間發(fā)送消息的語義,還需要確保連接的兩端都能遵循這些語義;

  • 同HTTP在TCP套接字上添加請求-響應(yīng)模型層一樣,STOMP在WebSocket之上提供了一個基于幀的線路格式層,用來定義消息語義.

代碼實現(xiàn)

代碼中除了最基本的連接,還設(shè)置了一個定時器,每隔十秒發(fā)送一條數(shù)據(jù)到服務(wù)器端,如果發(fā)生錯誤,catch這個錯誤,重新建立連接.

// 安裝并引入相關(guān)模塊
import SockJS from 'sockjs-client'; 
import Stomp from 'stompjs';
export default {
 data() {
  return {
  dataList: []
  };
 },
 mounted:function(){
  this.initWebSocket();
 },
 beforeDestroy: function () {
  // 頁面離開時斷開連接,清除定時器
  this.disconnect();
  clearInterval(this.timer);
 },
 methods: {
  initWebSocket() {
  this.connection();
  let self = this;
  // 斷開重連機(jī)制,嘗試發(fā)送消息,捕獲異常發(fā)生時重連
  this.timer = setInterval(() => {
   try {
   self.stompClient.send("test");
   } catch (err) {
   console.log("斷線了: " + err);
   self.connection();
   }
  }, 5000);
  },
  removeTab(targetName) {
  console.log(targetName)
  },
  connection() {
  // 建立連接對象
  this.socket = new SockJS('http://xxxxxx:8089/ws');//連接服務(wù)端提供的通信接口,連接以后才可以訂閱廣播消息和個人消息
  // 獲取STOMP子協(xié)議的客戶端對象
  this.stompClient = Stomp.over(this.socket);
  // 定義客戶端的認(rèn)證信息,按需求配置
  var headers = {
   login: 'mylogin',
   passcode: 'mypasscode',
   // additional header
   'client-id': 'my-client-id'
  };
  // 向服務(wù)器發(fā)起websocket連接
  this.stompClient.connect(headers,(frame) => {
   this.stompClient.subscribe('/topic/chat_msg', (msg) => { // 訂閱服務(wù)端提供的某個topic
   consolel.log(msg.body); // msg.body存放的是服務(wù)端發(fā)送給我們的信息
   });
  }, (err) => {
   
  });

  },
  disconnect() {
  if (this.stompClient != null) {
   this.stompClient.disconnect();
   console.log("Disconnected");
  }
  }
 }
};

上述內(nèi)容就是怎么在vue中使用SockJS實現(xiàn)與webSocket進(jìn)行通信,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標(biāo)題:怎么在vue中使用SockJS實現(xiàn)與webSocket進(jìn)行通信-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://muchs.cn/article14/dppsde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、做網(wǎng)站、虛擬主機(jī)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司