• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GOFLY在线客服-使用reconnect-websocket.js实现断线自动重连机制-GO语言实现开源独立 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

开发websocket应用,最难处理的就是断线后的自动重连

现在GOFLY在线客服使用reconnect-websocket.js就可以非常简单轻松的实现断线重连

 

reconnect-websocket.js的机制是,当连接websocket服务的过程中,如果连不上,会自动进行指定次数的重试

如果连接成功后回调onOpen方法以后,会把重试次数清空,因此如果是连接已经成功,但是后端主动关闭连接,这个库会不断的进行连接

这个问题也一并处理了下

 

核心代码在下面,是cdn引入的vue以及element-ui ,GOFLY也是这样的前端架构

 

<html>
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <!-- Import style -->
    <link
            rel="stylesheet"
            href="https://cdn.jsdelivr.net/npm/element-plus/dist/index.css"
    />
    <!-- Import Vue 3 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@next"></script>
    <!-- Import component library -->
    <script src="https://cdn.jsdelivr.net/npm/element-plus"></script>
</head>
<body>
<div id="app">
    <el-button>${ message }</el-button>
</div>
<script src="../../js/reconnect-websocket.js"></script>
<script>
    const App = {
        compilerOptions: {
            delimiters: ['${', '}'],
            comments: true
        },
        data() {
            return {
                message: "Hello Element Plus",
                apiHost:"ws://gofly.sopans.com/ws_visitor?visitor_id=efccd385-cdfe-41ed-8dfd-ab1faa732996&to_id=taoshihan",
                websocket:null,
                websocketOpenNum:0,
                websocketMaxOpenNum:20,
                websocketClosed:true,
            };
        },
        methods: {
            //初始化websocket连接
            initWebsocketConn() {
                this.websocket = new ReconnectingWebSocket(this.apiHost,null,{
                    debug:true
                });//创建Socket实例
                this.websocket.onmessage = this.onMessage;
                this.websocket.onopen = this.onOpen;
                this.websocket.onerror = this.onError;
                this.websocket.onclose = this.onClose;
            },
            onOpen(){
                console.log("ws:onOpen");
                if(this.websocketOpenNum>=this.websocketMaxOpenNum){
                    this.websocket.close();
                }
                this.websocketOpenNum++;
                this.websocketClosed=false;
                this.ping();
            },
            onMessage(){
                console.log("ws:onMessage");
            },
            onError(){
                console.log("ws:onError");
            },
            onClose(){
                console.log("ws:onClose");
                this.websocketClosed=true;
            },
            //心跳包
            ping(){
                var _this=this;
                setInterval(function () {
                    if(!_this.websocketClosed){
                        _this.websocket.send("ping");
                    }
                },10000);
            },
        },
        //属性初始化
        created(){
            this.initWebsocketConn();
        }
    };
    const app = Vue.createApp(App);
    app.use(ElementPlus);
    app.mount("#app");
</script>
</body>
</html>

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
密码学简介(go语言,黑马教程)发布时间:2022-07-10
下一篇:
Go语言核心36讲(导读)--学习笔记发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap