收藏
回答

websocket怎么重新连接

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug websocket 客户端 Android 6.6.7 2.0

当小程序切换到后台websocket关闭连接,再次切换到前台的时候怎么让它重新连接,有大神可以说说嘛

回答关注问题邀请回答
收藏

2 个回答

  • Allen
    Allen
    2018-08-16

    正常情况下,小程序切换到后台 WebSocket 应该不会关闭,但我们为了让程序稳定,需要手动关闭WebSocket 连接,下次进入小程序后,重新建立连接。

    参考以下代码:

    // App.js  App.js 用户小程序的运行时的生命周期,所以websocket 最好在App.js 中建立,保持连接,然后再其他页面用事件注册的方法来回调,仅供参考
     
    function createSocket() {
        return wx.connectSocket({
            url: socketURL
        });
    }
     
    App({
        socketEvents: {},
        onShow: function (options) {
            var it = this;
            it.initSocket();
        },
        initSocket: function () {
            var it = this;
            it.socketTask = createSocket();
     
            it.socketTask.onOpen(function (res) {
                console.log("链接成功");
                //维持心跳
                it.heartInter = setInterval(function () {
                    it.socketTask.send({
                        data: JSON.stringify({
                            type: "ping"
                        })
                    });
                }, 10000);
            });
            //非正常关闭socket后,重连
            it.socketTask.onClose(function (res) {
                if (res.code === 1000) {
                    return;
                }
                setTimeout(function () {
                    it.initSocket();
                }, 5000);
            });
            // 注册消息回调事件
            it.socketTask.onMessage(function (res) {
                var resObj = JSON.parse(res.data);
                if (typeof it.socketEvents[resObj.event] === 'function') {
                    it.socketEvents[resObj.event](resObj.data);
                }
            });
        },
        closeSocket: function () {
            if (this.socketTask) {
                this.socketTask.close();
            }
        },
        onHide: function () {
            this.closeSocket();
        }

    })

    //相关页面

    var app=getApp();

    Page({

    //在页面显示时

    onShow:function(){


    app.socketEvents = {

            "eventName":function(){console.log("我收到了一条消息");}

    }

    },

    //在页面隐藏时

    onHide:function(){

    app.socketEvents={};

    }

    })





    2018-08-16
    有用 2
    回复
  • 朱鹏飞
    朱鹏飞
    2018-08-16

    onShow 你重新连接一下不就可以了吗

    2018-08-16
    有用
    回复
登录 后发表内容