vue2 使用WebSocket

代码:

        带离开页面 刷新页面 关闭WebSocket

<template>
	<div></div>
</template>
<script>
export default {
	data() {
		return {
			websocket: null,
			// WebSocket 地址
			WebSocket_URL: '',
            reconnectTimer:null
		};
	},
	mounted() {
		// 调用WebSocket
		this.initSysWebsocket();
	},
	methods: {
		 initSysWebsocket() {
            try {
                // 判断浏览器是否支持WebSocket
                if ('WebSocket' in window) {
                    // console.log(this.wsUrl)
                    // console.log(this.$store.getters.userId)
                    // 正式环境参数
                    this.websocket = new WebSocket(this.WebSocket_URL);
                    // console.log(this.websocket)
                    this.initWebSocket()
                } else {
                    alert('当前浏览器 不支持')
                }
            } catch (e) {
                // console.log('尝试创建连接失败')
                //如果无法连接上webSocket 那么重新连接!可能会因为服务器重新部署,或者短暂断网等导致无法创建连接
                this.reConnect()
            }
        },
        reConnect() {
            //重连函数
            var that = this
            // if (this.isConnect) return
            this.reconnectTimer && clearInterval(this.reconnectTimer)
            // 如果 this.rec 存在,清除与之关联的定时器
            this.rec && clearTimeout(this.rec)
            // 延迟5秒重连  避免过多次过频繁请求重连
            this.rec = setTimeout(function () {
                that.initSysWebsocket();
            }, 5000)
        },
        initWebSocket() {
            // this.isConnect = true
            // 连接错误
            this.websocket.onerror = this.setErrorMessage
            // 连接成功
            this.websocket.onopen = this.setOnopenMessage
            // 收到消息的回调
            this.websocket.onmessage = this.setOnmessageMessage
            // 连接关闭的回调
            this.websocket.onclose = this.setOncloseMessage
            // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
            window.onbeforeunload = this.onbeforeunload
        },
        // 连接错误
        setErrorMessage() {
            // this.isConnect = false
            //调用重连函数
            this.reConnect()
            console.log('WebSocket连接发生错误   状态码:' + this.websocket.readyState)
        },
        // 连接成功
        setOnopenMessage() {
            let that = this
            console.log('WebSocket连接成功    状态码:' + this.websocket.readyState)
            that.reconnectTimer = setInterval(function () {
                console.log('WebSocket发送信息:' + "心跳:" + new Date().toLocaleString())
                that.websocket.send('心跳:' + new Date().toLocaleString());
            }, 6 * 1000);
        },
        // 接受消息的回调
        setOnmessageMessage(event) {
            const dataJson = JSON.parse(event.data);
            // console.log('接受的WebSocket参数', dataJson);
        },
        // 连接关闭的回调
        setOncloseMessage() {
            // this.isConnect = false
            // 重连
            this.reConnect()
            // console.log("connection closed (" + e.code + ")")
            console.log('WebSocket连接关闭    状态码:' + this.websocket.readyState)
        },
        onbeforeunload() {
            this.closeWebSocket()
        },
        closeWebSocket() {
            clearInterval(this.reconnectTimer)
            this.websocket.close();
            this.websocket.onclose = function (evt) {
                console.log("websocket已关闭");
            };
        },

	},
	created() {
		//绑定事件
		window.addEventListener('beforeunload', (e) => this.onbeforeunload());
	},
	beforeDestroy() {
        this.onbeforeunload()
	},
};
</script>
<style></style>

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue2中使用WebSocket的方法可以通过以下步骤来实现。首先,您需要在Vue组件中创建一个WebSocket实例。您可以使用WebSocket的库,如ws或nodejs-websocket。如果您的应用程序是在https环境下运行,需要使用wss。 然后,您需要在Vue组件中定义连接WebSocket的方法。您可以创建一个名为SocketService的类来处理WebSocket连接。在该类的构造函数中,您需要传入WebSocket的URL作为参数。然后,在connect方法中,您可以使用WebSocket的API来连接WebSocket,监听各种状态,如onopen、onclose、onerror以及onmessage。 最后,您可以在Vue组件中调用SocketService的connect方法来连接WebSocket。这样,您就能够在Vue组件中发送和接收WebSocket消息了。如果要发送一个对象,请记得将其转换为字符串类型,可以使用JSON.stringify({XXX})来实现。 这样,您就可以在Vue2中使用WebSocket了。希望这些信息能对您有所帮助。如果您还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [websocketvue2中的封装使用](https://blog.csdn.net/weixin_46587302/article/details/129385860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [WebScoket入门(vue2)](https://blog.csdn.net/Giraffe0615/article/details/126648023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值