下面是我打开/关闭套接字连接的方法:
methods: {
connect () {
this.$socket.onopen = () => {
this.status = 'connected'
this.$socket.onmessage = ({data}) => {
this.$socket.send(this.message)
console.log({ event: "Recieved message", data })
}
}
this.$socket.onclose = (e) => {
console.log('Socket is closed. Reconnect will be attempted in 1 second.')
setTimeout(() => {
this.connect()
}, 1000)
}
},
disconnect () {
this.$socket.close()
this.status = 'disconnected'
}
}
我没有使用socket.io等,只是内置了Websocket
对象。当我手动调用disconnect ()
方法时-它按预期关闭了连接,但当我再次发送消息时-它说连接已关闭。由于我在一个已安装的对象中调用connect ()
,如果我不刷新页面,它将不会重新连接。
我试过使用watcher:
watch: {
'$socket': 'connect'
}
但是没有效果。有没有办法监视WebSocket的连接状态?如果它是关闭的-调用connect ()
,如果它是错误的-调用connect ()
重新连接它。
2条答案
按热度按时间xqkwcwgp1#
你的
connect()
方法并没有“重新连接”到WebSocket服务器,所以调用this.connect()
只是重写你的onopen
处理程序。你必须采取必要的步骤重新连接到WebSocket服务器。这个问题的最佳答案很好地解释了你的代码的结构:
vue: emitting global events from websocket listener
不幸的是,它没有回答你的具体问题,所以我从这个答案中派生出沙箱,并在下面添加了修改后的代码,使你能够实现你的目标。
要了解如何使用此服务,请查看下面运行示例中的
index.js
:https://codesandbox.io/s/ry4993q654qcuzuvrc2#
重新连接前,应检查关闭状态代码。e.code === 1e3||即代码=== 1001||即代码=== 1005