html52.com
我爱小程序-开发者交流社区

怎么在路由切换时保持websocket连接不中断?

现在有一个业务场景是订单下发成功后,我会和后台建立socket连接,等待后台推送有人接单的消息,接到消息后断开socket连接,目前我的socket代码写在当前页面中,如果等待过程中返回上一级或者跳转路由就会断开socket连接,我想知道有没有一种办法可以把这个socket定义在全局,即连接成功后在所有页面都可以保持连接?建立socket的过程能定义在app.js中吗,如果定义在app.js中,在接到推送消息是该怎么处理业务逻辑呢?

网友回复

微喵网络:

肯定是定义在全局做处理啊,鬼知道用户会去哪个页面

相关代码:

要引入mitt.js,百度一下,一个很小的文件

app.js

const mitt = require('./utils/mitt').mitt
...
App({
    ...
    onLaunch: function () {
        let that = this
        that.globalData.bus = mitt()
        ...
        //连接socket
        ...
        //收到消息的回调中
        if (msg.length > 0) {
          that.globalData.bus.emit('_socketMsg', msg)
        }
        ...
    }
    ...
})

要用到消息的页面

const app = getApp()
...
Page({
    ...
    socketMsg: function(msg){
        //实际处理收到的消息
    },
    onShow: function () {
        let that = this
        app.globalData.bus.on('_socketMsg', that.socketMsg)
        ...
    },
    onHide: function () {
        let that = this
        app.globalData.bus.off('_socketMsg', that.socketMsg)
        ...
    },
    ...
})
卡卡:

我觉得会,你自己测试一下,所有小程序js运行在同一个环境,你不在页面销毁的时候关闭socket,那就会一直接收到消息,只不过你可能不能使用当前页面对象

牵着狗狗看MM:

socket定义在全局

.:

如果我在app.js中定义ScoketTask对象,在其他页面中建立连接并赋予message和close等方法,如果切换到其他页面后后台给我推送消息,还会触发message和close等方法吗?

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付