一、為什么需要websocket?
前端和后端的交互模式最常見的就是前端發(fā)數(shù)據(jù)請求,從后端拿到數(shù)據(jù)后展示到頁面中。如果前端不做操作,后端不能主動(dòng)向前端推送數(shù)據(jù),這也是http協(xié)議的缺陷。
? ? ? ?因此,一種新的通信協(xié)議應(yīng)運(yùn)而生---websocket,他最大的特點(diǎn)就是服務(wù)端可以主動(dòng)向客戶端推送消息,客戶端也可以主動(dòng)向服務(wù)端發(fā)送消息,實(shí)現(xiàn)了真正的平等。
?
websocket其他特點(diǎn)如下:
(1)建立在 TCP 協(xié)議之上,服務(wù)器端的實(shí)現(xiàn)比較容易。
(2)與 HTTP 協(xié)議有著良好的兼容性。默認(rèn)端口也是80和443,并且握手階段采用 HTTP 協(xié)議,因此握手時(shí)不容易屏蔽,能通過各種 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項(xiàng)目如何引用websocket?
vue使用websocket需要注意以下幾點(diǎn):
(1)首先需要判斷瀏覽器是否支持websocket,關(guān)于如何解決兼容性問題可以參考?這里這里
?
(2)在組件加載的時(shí)候連接websocket,在組件銷毀的時(shí)候斷開websocket
(3)后端接口需要引入socket模塊,否則不能實(shí)現(xiàn)連接
完整代碼:?
<template>
<div>
<button @click="send('你要發(fā)送的數(shù)據(jù)')">發(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{
// 實(shí)例化socket
this.socket = new WebSocket(this.path)
// 監(jiān)聽socket連接
this.socket.onopen = this.open
// 監(jiān)聽socket錯(cuò)誤信息
this.socket.onerror = this.error
// 監(jiān)聽socket消息
this.socket.onmessage = this.getMessage
}
},
open: function () {
console.log("socket連接成功")
},
error: function () {
console.log("連接錯(cuò)誤")
},
getMessage: function (msg) {
console.log(msg.data)
},
// 發(fā)送消息給被連接的服務(wù)端
send: function (params) {
this.socket.send(params)
},
close: function () {
console.log("socket已經(jīng)關(guān)閉")
}
},
destroyed () {
// 銷毀監(jiān)聽
this.socket.onclose = this.close
}
}
</script>
<style>
</style>
?文章來源地址http://www.zghlxwxcb.cn/news/detail-664181.html
?文章來源:http://www.zghlxwxcb.cn/news/detail-664181.html
?
到了這里,關(guān)于為什么需要websocket?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!