vue項目使用websocket技術(shù)解讀
一、為什么需要websocket?
前端和后端的交互模式最常見的就是前端發(fā)數(shù)據(jù)請求,從后端拿到數(shù)據(jù)后展示到頁面中。如果前端不做操作,后端不能主動向前端推送數(shù)據(jù),這也是http協(xié)議的缺陷。
因此,一種新的通信協(xié)議應(yīng)運而生---websocket,他最大的特點就是服務(wù)端可以主動向客戶端推送消息,客戶端也可以主動向服務(wù)端發(fā)送消息,實現(xiàn)了真正的平等。

websocket其他特點如下:
(1)建立在 TCP 協(xié)議之上,服務(wù)器端的實現(xiàn)比較容易。
(2)與 HTTP 協(xié)議有著良好的兼容性。默認(rèn)端口也是80和443,并且握手階段采用 HTTP 協(xié)議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務(wù)器。
(3)數(shù)據(jù)格式比較輕量,性能開銷小,通信高效。
(4)可以發(fā)送文本,也可以發(fā)送二進(jìn)制數(shù)據(jù)。
(5)沒有同源限制,客戶端可以與任意服務(wù)器通信。
(6)協(xié)議標(biāo)識符是ws(如果加密,則為wss),服務(wù)器網(wǎng)址就是 URL。
二、vue項目如何引用websocket?
vue使用websocket需要注意以下幾點:
(1)首先需要判斷瀏覽器是否支持websocket,關(guān)于如何解決兼容性問題可以參考 這里這里

(2)在組件加載的時候連接websocket,在組件銷毀的時候斷開websocket
(3)后端接口需要引入socket模塊,否則不能實現(xiàn)連接
不廢話了,直接附上完整代碼:
<template>
<div>
<button @click="send">發(fā)消息</button>
</div>
</template>
<script>
export default {
data () {
return {
path:"ws://192.168.0.200:8005/qrCodePage/ID=1/refreshTime=5",
socket:""
}
},
mounted () {
// 初始化
this.init()
},
methods: {
init: function () {
if(typeof(WebSocket) === "undefined"){
alert("您的瀏覽器不支持socket")
}else{
// 實例化socket
this.socket = new WebSocket(this.path)
// 監(jiān)聽socket連接
this.socket.onopen = this.open
// 監(jiān)聽socket錯誤信息
this.socket.onerror = this.error
// 監(jiān)聽socket消息
this.socket.onmessage = this.getMessage
}
},
open: function () {
console.log("socket連接成功")
},
error: function () {
console.log("連接錯誤")
},
getMessage: function (msg) {
console.log(msg.data)
},
send: function () {
this.socket.send(params)
},
close: function () {
console.log("socket已經(jīng)關(guān)閉")
}
},
destroyed () {
// 銷毀監(jiān)聽
this.socket.onclose = this.close
}
}
</script>
<style>
</style>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue2和vue3中provide/inject的基本用法示例
Vue中的provide/inject是一種組件間通信的方式,它允許父組件向子組件傳遞數(shù)據(jù),而不需要通過props或事件來實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue2/vue3中provide/inject的基本用法的相關(guān)資料,需要的朋友可以參考下2023-04-04
Vue?2?和?Vue?3?中?toRefs函數(shù)的不用用法
Vue?是一款流行的JavaScript?框架,用于構(gòu)建用戶界面,在Vue2和?Vue3中,都存在一個名為toRefs的函數(shù),但其行為在這兩個版本中有所不同,這篇文章主要介紹了Vue2和Vue3中toRefs的區(qū)別,需要的朋友可以參考下2023-08-08
Vue3中reactive函數(shù)toRef函數(shù)ref函數(shù)簡介
這篇文章主要介紹了Vue3中的三種函數(shù),分別對reactive函數(shù)toRef函數(shù)以及ref函數(shù)原理及使用作了簡單介紹,有需要的朋友可以借鑒參考下2021-09-09
Vue3組件中g(shù)etCurrentInstance()獲取App實例,但是返回null的解決方案
這篇文章主要介紹了Vue3組件中g(shù)etCurrentInstance()獲取App實例,但是返回null的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
vue中的vue-router?query方式和params方式詳解
這篇文章主要介紹了vue中的vue-router?query方式和params方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Vue使用vxe-table導(dǎo)出和自定義Excel樣式的詳細(xì)教程
vxe-table 不僅支持將表格數(shù)據(jù)導(dǎo)出為 .xlsx 文件,還提供了強(qiáng)大的自定義樣式能力,因此本文給大家介紹了Vue使用vxe-table導(dǎo)出和自定義Excel樣式的詳細(xì)教程,需要的朋友可以參考下2026-05-05

