第一次使用websocket就是需要在vue中去使用他,在網上搜索了很多如何在vue中使用的教程和示例,有些demo過於簡單擴展性太差,有些存在bug
網上經常被搜索到的一個答案是這個https://blog.csdn.net/niyuelin1990/article/details/78062139#commentsedit,但是這個答案中在解決websocket未開啓和正在開啓狀態的處理方式是使用setTimeout去假定異步的狀態,這個處理方式是存在問題的,於是我在這篇文章的基礎上做出了一些修改,通過在onopen事件和onerror事件中處理websocket未開啓和正在開啓狀態的數據發送問題
目前使用到現在沒有出現什麼問題,複製即用
<template>
<div class="test">
</div>
</template>
<script>
export default {
name : 'test',
data() {
return {
websock: null,
}
},
created() {
this.initWebSocket();
},
destroyed() {
this.websock.close() //離開路由之後斷開websocket連接
},
methods: {
initWebSocket(){ //初始化weosocket
const wsuri = "ws://127.0.0.1:8080";
this.websock = new WebSocket(wsuri);
this.websock.onmessage = this.websocketonmessage;
this.websock.onopen = this.websocketonopen;
this.websock.onerror = this.websocketonerror;
this.websock.onclose = this.websocketclose;
},
websocketonopen(){ //連接建立之後執行send方法發送數據
let actions = {"test":"12345"};
this.websocketsend(JSON.stringify(actions));
},
websocketonerror(){//連接建立失敗重連
this.initWebSocket();
},
websocketonmessage(e){ //數據接收
const redata = JSON.parse(e.data);
},
websocketsend(Data){//數據發送
this.websock.send(Data);
},
websocketclose(e){ //關閉
console.log('斷開連接',e);
},
},
}
</script>
<style lang='less'>
</style>