微信小程序websocket的使用

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

  感谢大家的点赞和转发,欢迎大家关注本人的博客。试用期指导,项目开发,简历优化,毕业设计/论文,欢迎添加本人微信。

 新人作者,欢迎关注和收藏👏🏻👏🏻

小程序 使用websocket,微信小程序,微信小程序,websocket,小程序

微信小程序中使用websocket分为两步:

1、现在微信公众平台的开发者工具中配置socket的域名

小程序 使用websocket,微信小程序,微信小程序,websocket,小程序

 2、开始编写使用websocket的业务代码

 2.1发起请求建立一个socket连接

let SocketTask = wx.connectSocket({
      url: 'wss://app-test.kidsplace.cn:18887',
      success: function (res) {
        console.log(res)
        that.setData({
          heartbeatfail: 0
        })
        that.setData({
          socketConect: true
        })
      },
      fail: function (err) {
        console.log(err)
      }
    })

这里是通过微信自带的一个wx.connectSocket函数来传入响应的socket域名和端口号来建立连接的,注意这个函数会返回一个SocketTask对象,里面包含了socket任务的信息,可以用来管理sock任务。一个微信小程序页面最多同时建立五条socket任务。 

 2.2监听socket连接建立,向服务器发送身份认证协议

SocketTask.onOpen((res) => {
     console.log(res)
     // that.startHeartBeat(that.data.socketTask[0])
     SocketTask.send({
       //向服务器发送消息
       data: JSON.stringify(params),
       success: function (res) {
         console.log(res, '发送成功了')
          
       },
       fail: function (err) {
         console.log(err, '发送失败了')
       }
     })
   })

这里通过SocketTask.onOpen来监听socket是否建立成功,如果建立成功在监听的回调中调用SocketTask.send()方法向服务器发送身份认证的报文,并且监听是否发送成功。 

 2.3身份认证成功后向服务器发送绑卡信息(本次业务需求),并且监听服务器发送的报文。

SocketTask.onMessage((res) => {
          //监听 WebSocket 接受到服务器的消息事件
          let data = JSON.parse(res.data)
          console.log(data, '服务器的消息')
          if (data.code == '200' && data.success && data.msgType == 'auth_ack') {
            let data = {
              type: "bindCard",
              cardId: that.data.cards[0].LeaguerCode,
              BusinessID:that.data.cards[0].BusinessID,
              phone: sessionService.get('userInfo').member.phone,
              memberId:  sessionService.get('userInfo').member.id,
              BusinessName:that.data.cards[0].BusinessName,//门店名称
              baseId:that.data.cards[0].LeaguerBaseID
            }
            SocketTask.send({
              data: JSON.stringify(data),
              success: function (res) {
                console.log(res, '绑卡认证信息发送成功')
              }
            })
          }
        })

这里调用SocketTask.onMessage()来监听服务发送的报文,成功的回调中会返回一个data用来存储服务发送的报文。 

2.4在离开页面的时候关闭socket

onUnload: function () {
    let that = this
    this.data.socketTask[0].close({
      success: function (res) {
        console.log(res, '离开页面关闭socket')
        that.stopHeartBeat() //离开页面并关闭socket之后停止心跳
      },
      fail: function (err) {
        console.log(err, '关闭socket失败了')
      }
    })
}

注意:小程序离开原生页面会调用onUnload生命周期,也就是销毁该页面的页面栈,而进入web-view页面则会调用onHide生命周期,因为web-view相当于盖在原生页面上的组件,因此销毁socket需要注意不同的场景调用不同的生命周期钩子

总结:经过这样几个步骤跟服务器建立一个基本的websocket连接就算是完成了。

注意:SocketTask.onOpen和ocketTask.onMessage都是自动监听的因此调用一次即可

在完成websocket连接的建立之后还需要建立一个心跳连接,心跳连接的作用是用来监听socket是否断开连接,如果断开连接需要进行自动重连。

startHeartBeat() {
    this.setData({
      heart: true
    })
    this.heartbeat()
  },
heartbeat() {
   let that = this
   if (!this.data.heart) {
     return
   }
   let data = {
     type: 'heartBeat',
     msg: 'this is heatbeat'
   }
   this.data.socketTask[0].send({
     data: JSON.stringify(data),
     success: function (res) {
       console.log(res, '心跳成功,连接正常')
       if (that.data.heart) {
         that.data.heartBeatTimeout = setTimeout(() => {
           that.heartbeat(that.data.socketTask[0])
         }, that.data.timeout)
       }
     },
     fail: function (err) {
       that.data.socketTask[0].onClose((err) => {
         console.log(err, '关闭的原因')
       })
       console.log(err, '心跳失败,连接中断')
       if (that.data.heartbeatfail > 2) {
         that.setData({
           socketTask: []
         })
         that.socekt()
       }
       if (that.data.heart) {
         that.data.heartBeatTimeout = setTimeout(() => {
           that.heartbeat(that.data.socketTask[0])
         }, that.data.timeout)
       }
       that.setData({
         heartbeatfail: that.data.heartbeatfail + 1
       })
     }
   })
 },

 这个心跳函数的主要逻辑就是在socket建立之后向服务端发送一个心跳消息,如果发送成功了就证明socket连接正常,设置一个定时器每隔一段时间就发送一次心跳,如果失败了也设置一个定时器每隔一段时间在发一次心跳,并且记录失败的次数,如果失败的次数超过上限,就会将socketTask的任务数组置空,然后停止心跳,重新执行socket()方法建立连接跟心跳,主要是一种递归的思想。

这样一个具有心跳机制的socket连接就完成建立了

  感谢大家的点赞和转发,欢迎大家关注本人的博客。试用期指导,项目开发,简历优化,毕业设计/论文,欢迎添加本人微信。

 新人作者,欢迎关注和收藏👏🏻👏🏻

小程序 使用websocket,微信小程序,微信小程序,websocket,小程序

 觉得作者写的不错或者心情愉悦的老板也可以投币打赏,感谢观看,希望能给大家带来帮助 

 小程序 使用websocket,微信小程序,微信小程序,websocket,小程序文章来源地址https://www.toymoban.com/news/detail-848497.html

到了这里,关于微信小程序websocket的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp vue3 微信小程序 项目中使用 websocet、微信小程序真机调试 websocket 报错 errMsg: “Invalid HTTP status.“

    uniapp-websocket官方文档 注意点:需要在确定建立连接后才能去发送数据 这个错误通常是因为小程序 WebSocket 请求的地址没有配置为 HTTPS,而是使用了 HTTP,因此需要注意以下几点: 小程序开发者工具可以支持使用 ws:// 前缀的 WebSocket 地址,但在真机上会因为不安全的原因而无

    2024年01月17日
    浏览(49)
  • 【微信小程序】使用 WebSocket 进行订阅操作、连接监听、接收到服务器的消息事件

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

    2024年02月16日
    浏览(40)
  • 微信小程序如何使用原生Websocket api与Asp.Net Core SignalR 通信

    如题,这可能算是.net 做小程序的服务端时,绕不开的一个问题,老生常谈了。同样的问题,我记得我2018/19年的一个项目的解决方案是: 修改官方的SignalR.js的客户端 :把里面用到浏览器的Websocket改成微信小程序的官方api的。目前网上也有不少这样的方案,已经改好开源了;

    2024年02月09日
    浏览(65)
  • 微信小程序全局websocket

    全篇干货无废话 实现微信小程序全局websocket 含掉线重连,心跳保活等机制,可做参考示例 app.js

    2024年02月09日
    浏览(35)
  • 微信小程序如何连接websocket

    在需要启用的地方调用app.js中的openScoket()函数;停用的地方调用closeSocket()函数 callback函数在各页面中的应用方法

    2024年02月15日
    浏览(37)
  • 微信小程序 WebSocket 通信 —— 在线聊天

             * 源码已经上传到资源处,需要的话点击跳转下载 |  源码下载         在Node栏目就讲到了Socket通信的内容,使用Node实现Socke通信,还使用两个流行的WebSocket 库,ws 和 socket.io,在小程序中的WebSocket接口和HTML5的WebSocket基本相同,可以实现浏览器与服务器之间的

    2024年02月01日
    浏览(38)
  • springboot+websocket+微信小程序实现评论区功能

    1. 什么是WebSocket? WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器 全双工通信 ,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是: WebSocket 是一种 双向通信协议 ,在建立连接后,WebSo

    2024年04月16日
    浏览(24)
  • 微信小程序 | 基于小程序+Java+WebSocket实现实时聊天功能

    此文主要实现在小程序内聊天对话功能,使用Java作为后端语言进行支持,界面友好,开发简单。 2.1、注册微信公众平台账号。 2.2、下载安装IntelliJ IDEA(后端语言开发工具),Mysql数据库,微信Web开发者工具。 1.创建maven project 先创建一个名为SpringBootDemo的项目,选择【New Proje

    2024年02月02日
    浏览(40)
  • SpringBoot实现Websocket聊天交友微信小程序(一)

    记录一下我开发一个交友微信小程序并且上线运营的心得体会。 2022年10月1日上线的,到目前终于实现每天收益300左右。 界面比较简洁,功能有动态,动态可以选择话题,相册,相册可以设置看广告解锁,私信,私信可以发图片,发语音。还有会员功能。前端用的uniapp,UI框

    2024年02月03日
    浏览(34)
  • 微信小程序WebSocket实现stream流式聊天对话功能

    要在微信小程序实现聊天对话功能,回话是流式应答,这里使用了WebSocket技术。WebSocket大家应该都很熟悉,使用wx.connectSocket就可以了。这里可能需要注意下的是流式应答,后端如何发送,前端如何接收。直接上代码: 可以扫码体验: 后端关键代码: 小程序ts代码: 可以扫码

    2024年04月10日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包