微信小程序添加全局 socket 并接收消息通知

这篇具有很好参考价值的文章主要介绍了微信小程序添加全局 socket 并接收消息通知。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近小程序中有使用到socket,来建立长连接,实现消息通知。总结一下实现思路。

首先,在app.js中初始化socket,并处理消息,添加心跳检测。

App({
  globalData: {
    supplierId: null,
    socketUrl: null, // socketUrl
    timeout: 10000, // 延迟
    socketHeartTimer: null,
    callback: function () {}, // socket连接回调函数
    socketClientTimer: null, // socket连接定时器
    isSocketConnect: false, // 当前socket是否连接
  },
  onShow() {
    // 检查用户登录状态,并决定是否开启socket
    this.checkLoginUserSocket();
    //判断是否登录 连接socket
    this.globalData.socketClientTimer = setInterval(() => {
      // 定时器---检查用户登录状态,并决定是否开启socket
      this.checkLoginUserSocket();
    }, 30000)
  },
  // 小程序进入后台
  onHide() {
    // 关闭全局socket状态连接定时器
    clearInterval(this.globalData.socketClientTimer)
    // 关闭socket
    this.closeSocketFunction()
  },
  // 检查用户登录状态,并决定是否开启socket
  checkLoginUserSocket() {
    this.globalData.supplierId = wx.getStorageSync('supplierId') || null;
    if (this.globalData.supplierId) {
      //登录状态下调用连接socket 且判断是否已经连接socket 
      if (!this.globalData.isSocketConnect) {
        // console.log("-----用户一登录---连接socket")
        this.connectSocketFunciton()
      }
    } else {
      // console.log("-----用户未登录--关闭socket")
      //未登录状态下清除定时器关闭socket
      this.closeSocketFunction()
    }
  },
  //小程序连接socket
  connectSocketFunciton() {
    var that = this
    var socketUrl = `wss://192。168.1.33/wss/websocket/${that.globalData.supplierId}`
    wx.connectSocket({
      url: socketUrl,
      success: (res => {
        // 标识socket已连接
        that.globalData.isSocketConnect = true
        // 初始化连接监听
        that.initEventHandler()
      }),
      fail: (fail => {})
    })
  },
  // 绑定监听
  initEventHandler() {
    var that = this
    // socket连接开启
    wx.onSocketOpen((result) => {
      // 开启心跳
      that.startHeart()
    })
    // socket连接关闭
    wx.onSocketClose((res) => {
      if (that.globalData.isSocketConnect) {
        that.connectSocketFunciton()
      }
    })
    // 接收socket消息
    wx.onSocketMessage((res) => {
      console.log("onSocketMessage", res)
      //第一次消息如果为init就绑定uid
      // var data = JSON.parse(res.data)
      //这里data可以根据后端返回的数据做一些处理 根据自己的需求做出对应的处理
      // 全局socket接收消息的方法回调
      that.globalData.callback(res)
    })
  },
  //发送心跳
  startHeart() {
    if (this.globalData.isSocketConnect) {
      this.globalData.socketHeartTimer = setInterval(() => {
        wx.sendSocketMessage({
          data: 'heartBath',
          success: function (res) {},
          fail: function (res) {}
        })
      }, 45 * 1000)
    } else {
      clearTimeout(this.globalData.socketHeartTimer)
    }
  },
  //此页面关闭socket和定时器的函数
  closeSocketFunction: function () {
    if (this.globalData.isSocketConnect) {
      // 标识socket已断开
      this.globalData.isSocketConnect = false
      // 关闭socket连接
      wx.closeSocket()
      // 关闭socket心跳定时器
      clearInterval(this.globalData.socketHeartTimer)
    }
  },
})

然后再接收到消息时添加回调方法:

// 接收socket消息
wx.onSocketMessage((res) => {
  console.log("onSocketMessage", res)
  //第一次消息如果为init就绑定uid
  // var data = JSON.parse(res.data)
  //这里data可以根据后端返回的数据做一些处理 根据自己的需求做出对应的处理
  // 全局socket接收消息的方法回调
  that.globalData.callback(res)
})

然后再需要进行通知处理的页面添加如下代码:

onShow() {
    this.onSoekctCallback();
},
// 收到消息处理
onSoekctCallback: function () {
    app.globalData.callback = (res) => {
        console.log("获取到消息了", res.data);
        if (res.data === 'success' || res.data === 'heartBath') return
        let { supplierId } = this.data;
        this.onRequireNoticeList(supplierId);
    }
},

最后,小程序的socket通知处理就完成了,欢迎各位大佬评论文章来源地址https://www.toymoban.com/news/detail-566267.html

到了这里,关于微信小程序添加全局 socket 并接收消息通知的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微信小程序】使用 WebSocket 进行订阅操作、连接监听、接收到服务器的消息事件

    在微信小程序中使用 WebSocket 进行订阅操作,可以通过 wx.connectSocket 方法创建 WebSocket 连接,并通过相关事件处理函数进行订阅和数据处理。 以下是一个示例代码,演示了在微信小程序中使用 WebSocket 进行订阅: 在上述代码中,我们首先使用 wx.connectSocket 方法创建 WebSocket 连接

    2024年02月16日
    浏览(62)
  • 微信小程序通知,微信小程序长期订阅消息添加硬件设备能力的设备订阅消息step-by-step

    本文目的,分享一个实际案例: 开发微信小程序的报警器的微信订阅消息, 设备报警后触发微信报警 前提: 有一个微信小程序并且微信认证过。 1: 添加设备申请权限 2:按照实际情况填写设备信息, 一般等两天到三天能审核过  3: 申请设备消息能力 , 这个一部不做的

    2024年04月16日
    浏览(53)
  • uniapp全局挂载uViewUI的u-toast消息通知组件(微信小程序)

    在使用uView消息通知组件的时候,必须在每个页面中手动添加一个标签,打上ref然后才能调用,非常的麻烦,能不能像ElementUI那样把组件挂载到Vue原型上从而能全局调用呢,个人也是尝试了很多方法,但是由于小程序的app.vue不能写页面,所以无法达到ElementUI那种方便的效果,

    2024年02月15日
    浏览(48)
  • 如何为微信小程序添加订阅消息和推送通知功能

    为微信小程序添加订阅消息和推送通知功能是非常有用的,它可以让用户在重要的事件发生时及时地收到通知。在本文中,我们将详细介绍如何为微信小程序添加这两种功能。 一、订阅消息 订阅消息是一种新的消息类型,用户可以选择是否订阅它们。订阅消息一般用于向用

    2024年02月04日
    浏览(74)
  • 微信小程序 全局配置||微信小程序 页面配置||微信小程序 sitemap配置

    小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。 以下是一个包含了部分常用配置选项的 app.json : 每一个小程序页面也可以使用同名 .json 文件来对本页面的窗口表现进行配置,页面中配

    2024年02月01日
    浏览(47)
  • C/C++ Socket UDP 广播消息的发送与接收

    局域网内全网段广播消息的IP地址为:255.255.255.255,向该IP地址发送广播消息,局域网下的任何网段的客户机都能收到广播。 对于发送端,如果你只想给某个特定的网段发送消息,例如你的IP地址为192.168.31.107,那么你的广播地址是192.168.31.255,向该广播地址发送广播消息,只

    2024年02月12日
    浏览(38)
  • 微信小程序全局配置

    小程序根目录下的 app.json 文件是小程序的全局配置文件。常用的配置项如下: ① pages 记录当前小程序所有页面的存放路径 ② window 全局设置小程序窗口的外观 ③ tabBar 设置小程序底部的 tabBar 效果 ④ style 是否启用新版的组件样式  设置步骤:app.json - window - navigationBarTitle

    2024年04月17日
    浏览(38)
  • 微信小程序全局配置详解

    登录网址 https://mp.weixin.qq.com/ 注册网址 https://mp.weixin.qq.com/cgi-bin/wx?token=lang=zh_CN 下载地址 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 描述整体的app app.js 小程序逻辑 app.json 小程序公共配置 app.wxss 小程序公共样式表 描述各自页面的page 为了方便开发者减少配置项,

    2024年02月13日
    浏览(47)
  • 微信小程序全局数据共享

    全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题。 在小程序中,可使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数据共享mobx-miniprogram用来创建Store实例对象 mobx-miniprogram-bindings用来把Store中的共享数据或方法,绑定到组件或页面中使用  npm install --s

    2024年02月11日
    浏览(58)
  • 微信小程序 使用全局变量

    微信小程序里面有个 app.js ,我们可以在这个里面设置全局变量, 全局变量的定义:  globalData: {         userInfo: null,         tempFilePathslist: []     }  全局变量的获取: 在 app.js 文件中,直接使用,如: var gettempFilePathslist = this.globalData.tempFilePathslist 在 其他非app

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包