webScoket

作者: 码农界四爷__King | 来源:发表于2021-05-13 14:57 被阅读0次
    export default {
        name: 'Resource',
        data() {
            return {
                wsUrl: '',
                websocket: null
            }
        },
        methods: {
            updateUrl(urlPath) {
                let _this = this;
                //注册Websocket的url  其中CONFIG.WEBSOCKET_URL为wensocket服务地址,_this.userData.user是登录用户的用户名,这样做为了保证不同用户的websocket地址的唯一性,防止消息发生混淆。
                if (urlPath.indexOf('sockjs') != -1) {
                    _this.wsUrl = 'http://' + CONFIG.WEBSOCKET_URL + urlPath + ";" + _this.userData.user;
                } else {
                    if (window.location.protocol == 'http:') {
                        _this.wsUrl = 'ws://' + CONFIG.WEBSOCKET_URL + urlPath + ";" + _this.userData.user;
                    } else {
                        _this.wsUrl = 'wss://' + CONFIG.WEBSOCKET_URL + urlPath + ";" + _this.userData.user;
                    }
                }
            },
            webSocketLink() {
                let _this = this;
//由于网络以及websocket自身的一些不稳定性,页面长时间打开的情况下有时会发生websocket链接的断开,为了防止这种情况,我们增加心跳检测机制
                var heartCheck = {
                    timeout: 5000, //5秒 
                    timeoutObj: null,
                    reset: function() {
                        clearInterval(this.timeoutObj);
                        return this;
                    },
                    start: function() {
                        this.timeoutObj = setInterval(function() {
                            _this.websocket.send("HeartBeat");
                            console.log("HeartBeat");
                        }, this.timeout)
                    }
                };
               //初始化WebSocket对象  为了兼容各个浏览器所以初始化的时候针对不同的浏览器初始化调用不同的方法。
                if ('WebSocket' in window) {
                    _this.updateUrl("/webSocketServer");
                    _this.websocket = new WebSocket(_this.wsUrl);
                } else if ('MozWebSocket' in window) {
                    _this.updateUrl("/webSocketServer");
                    _this.websocket = new MozWebSocket(_this.wsUrl);
                } else {
                    _this.updateUrl("/sockjs/webSocketServer");
                    _this.websocket = new SockJS(_this.wsUrl)
                }
//并且在websocket链接建立时触发该方法
                _this.websocket.onopen = function() {
                    console.log("websock连接成功");
                    heartCheck.reset().start();
                };
                _this.websocket.onmessage = function(event) {
                    console.log(event.data);
                }
            }
        },
//Vue组件中什么时候创建和销毁websocket对象   为了保证websocket对象能够及时创建,建议在vue的created的钩子函数中触发websocket的初始化,同时在beforeRouteLeave方法里关闭websocket的链接
        beforeRouteLeave(to, from, next) {
            if (this.websocket) {
                this.websocket.close()
            }
        },
        created() {
            this.webSocketLink();
        }
    }

相关文章

  • webscoket

    注意断开重连,每次发送信息初始化心跳,异步发送信息,一分钟内重连,超时不连,发送信息判断是否打开并进行一步发送,心...

  • webscoket

    加pom依赖,新建模块:spring-boot-websocker 1.1.加依赖: WebSocketConfi...

  • webScoket

  • WebScoket协议的理解与使用

    1. 什么是WebScoket协议? WebScoket是HTML5的一个持久化协议,实现了浏览器与服务器的双全工...

  • 浅析WebScoket

    因 HTTP 协议通信只能由客户端发起。WebScoket 的使用使服务器可以主动向客户端推送信息,客户端也可以主...

  • 面试题集三—webscoket相关

    webscoket是h5提供的一种在单个TCP连接上进行全双工通信的协议webscoket允许服务端主动向客户端推...

  • WebSocket

    注意:webscoket.onopen这个事件在new WebSocket("ws://localhost:999...

  • 欢迎来借鉴分布式WebSocket解决方案

    单体Webscoket springboot版本: 2.1.1.RELEASE jdk: 1.8 示例代码 Web...

  • webscoket 简单的聊天室:

    webscoket 的服务器workerman:(1)下载地址:http://www.workerman.net/...

  • SpringBoot 搭建WebScoket

    WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定...

网友评论

      本文标题:webScoket

      本文链接:https://www.haomeiwen.com/subject/oztxjltx.html