From 34800e836f88d0edae9c22614baf284c83d459e7 Mon Sep 17 00:00:00 2001 From: jeshrz Date: Sat, 29 May 2021 21:17:30 +0800 Subject: [PATCH 1/2] fix: close websocket before the filter --- src/components/mixins/websocket.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/components/mixins/websocket.js b/src/components/mixins/websocket.js index bb959886..8f3750d1 100644 --- a/src/components/mixins/websocket.js +++ b/src/components/mixins/websocket.js @@ -42,11 +42,22 @@ export default { }; this.websock.onerror = onerror; this.websock.onclose = onclose; + }, + closeWebSocket: function() { + if (this.websock) { + this.websock.close(); + } } }, - destroyed: function() { - if (this.websock) { - this.websock.close(); + watch: { + $route: function() { + this.closeWebSocket(); } + }, + destroyed: function() { + this.closeWebSocket(); + }, + beforeRouteUpdate: function() { + this.closeWebSocket(); } } From 5c1d278b5b32aba710fffa04e8f8f8c52d649818 Mon Sep 17 00:00:00 2001 From: jeshrz Date: Sat, 29 May 2021 21:32:35 +0800 Subject: [PATCH 2/2] fix: wait ws connected before sending message --- src/components/mixins/websocket.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/mixins/websocket.js b/src/components/mixins/websocket.js index 8f3750d1..b0e450dd 100644 --- a/src/components/mixins/websocket.js +++ b/src/components/mixins/websocket.js @@ -34,12 +34,27 @@ export default { methods: { initWebSocket: function(url, params, onmessage, onerror, onclose) { this.websock = new WebSocket(getWsURL() + url); + + // proxy function that wait readyState === 1 + const waitForConnection = (callback, interval) => { + if (this.websock.readyState === 1) { + callback(); + } else { + setTimeout(() => { + waitForConnection(callback, interval); + }, interval); + } + } this.websock.onopen = () => { - this.websock.send(JSON.stringify(params)); + waitForConnection(() => { + this.websock.send(JSON.stringify(params)); + }, 500); }; + this.websock.onmessage = ret => { onmessage(JSON.parse(ret.data)); }; + this.websock.onerror = onerror; this.websock.onclose = onclose; },