当前位置: 首页 > article >正文

微信小程序-WebSocket

文章目录

  • 微信小程序-WebSocket
    • 概述
    • WebSocket
    • SocketTask
    • 使用

微信小程序-WebSocket

概述

微信小程序官方提供了 WebSocket API,允许服务器主动向微信小程序发送消息。

微信小程序中的 WebSocke 与HTML5中的 WebSocket 基本相同。WebSocket 是一种在单个TCP连接上进行全双工通信的协议,它会在客户端与服务器之间专门建立一条通道,使客户端与服务器之间的数据交换变得简单。客户端与服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

WebSocket 协议是以 ws 或 wss 开头的(类似于 http 和 https 的关系),在微信小程序中,正式项目必须使用以 wss 开头协议,在开发模式下可以使用以 ws 开头协议。

WebSocket

通过调用 wx.connectSocket() 方法创建一个 WebSocket 连接。

wx.connectSocket()方法选项:

选项类型说明
urlstringwss 接口地址
headerobject请求头,不能设置 Referer
timeoutnumber超时事件,单位为毫秒
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数

使用 wx.connectSocket() :

wx.connectSocket({
    url: "ws://127.0.0.1:3000"
})

SocketTask

当项目中同时存在多个 WebSocket 的连接时,可以使用 SocketTask 管理 WebSocket 连接,使每一条链路的生命周期都更可控。

使用 wx.connectSocket() 方法的返回值就是一个 ScoketTask 实例。

const task = wx.connectSocket({
    url: "ws://127.0.0.1:3000"
})

SocketTask实例方法:

方法
send()通过 WebSocket 连接发送数据
close()关闭 WebSocket 连接
onOpen()监听 WebSocket 连接打开事件
onClose()监听 WebSocket 连接关闭事件
onError()监听 WebSocket 错误事件
onMessage()监听 WebSocket 接收到服务器的消息事件

send()选项:

选项类型说明
datastring/ArrayBuffer需要发送的内容,必填项
successfunction接口调用成功的回调方法
failfunction接口调用失败的回调方法
completefunction接口调用结束的回调方法

onClose()属性:

属性类型说明
codenumber一个数字值表示关闭连接的状态号,表示连接被关闭的原因。
reasonstring一个可读的字符串,表示连接被关闭的原因。

close()选项:

选项类型说明
codenumber一个数字值表示关闭连接的状态号,表示连接被关闭的原因。默认值为 1000(表示正常关闭连接)
reasonstring一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数

onOpen()属性:

属性类型说明
headerobject连接成功的 HTTP 响应 Header
profileobject网络请求过程中一些调试信息

onMessage()属性:

属性类型说明
datastring/ArrayBuffer服务器返回的消息

onError()属性:

属性类型说明
errMsgstring错误信息

使用

创建和监听:

Page({
  data: {
    content: "",
    list: [],
    lastId: ""
  },
  message: "",
  ws: null,
  onLoad: function () {
    const ws = wx.connectSocket({
      url: 'ws://127.0.0.1:3000',
      success: res => {
        console.log("连接成功:" + res);
      },
      fail: err => {
        console.log("连接失败:" + err);
      }
    })
    ws.onMessage(msg => {
      console.log("接收消息:" + msg.data);
      let data = JSON.parse(msg.data)
      let list = this.data.list
      let lastId = list.length
      list.push({
        id: lastId,
        content: data.content,
        role: "server"
      })
      this.setData({
        list,
        lastId
      })
    })
    ws.onClose(res => {
      console.log("close");
    })
    this.ws = ws
  },
  onUnload: function () {
    this.ws.close()
  },
  input: function (e) {
    this.message = e.detail.value
  }, 
})

发送数据:

send: function (e) {
    if (!this.message) {
        wx.showToast({
            title: "消息不能为空",
            icon: "none",
            duration: 2000
        })
        return
    }
    this.ws.send({
        data: this.message
    })
    const list = this.data.list
    const lastId = list.length
    list.push({
        id: lastId,
        content: this.message,
        role: "me"
    })
    this.setData({
        list,
        lastId,
        content: ""
    })
    this.message = ""
}

http://www.kler.cn/news/321998.html

相关文章:

  • git diff 命令
  • 【逐行注释】MATLAB的程序,对比EKF(扩展卡尔曼滤波)和PF(粒子滤波)的滤波效果,附下载链接
  • ruoyi源码解析学习 - 微服务版 - ruoyi-gateway
  • 【人工智能】多模态AI:如何通过融合文本、图像与音频重塑智能系统未来
  • Qt系统相关——QFile和QFileInfo
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(5)系统时间与信息
  • Django 依赖库管理
  • 【计网】从零开始掌握序列化 --- 基础知识储备与程序重构
  • Ubuntu24.04下安装Budgie桌面的注意事项
  • 【C++掌中宝】深入理解函数重载:概念、规则与应用
  • Map和Set,TreeMap和TreeSet,HashMap和HashSet
  • Docker安装和配置MySQL 5.7的完整指南
  • 【Unity与数据库01】开发者如何选择数据库
  • 深度学习:(五)初识神经网络
  • Unity2022.3.x各个版本bug集合及推荐稳定版本
  • 使用jQuery处理Ajax
  • kotlin——设计模式之责任链模式
  • 数据结构之二叉树(1)
  • 本地生活服务项目揭秘!谁搭建的本地生活服务商作业系统收益效果好?
  • 使用ELK Stack进行日志管理和分析:从入门到精通
  • JDK7和JDK8中的HashMap有什么区别?
  • 初学51单片机之I2C总线与E2PROM
  • Java 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)
  • 【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常
  • git 清除二进制文件的 changes 状态
  • [笔记]某华AICrane系统全景笔记
  • 鸿蒙界面开发(九):列表布局 (List)
  • 数据结构 - 查找算法
  • 重生之我们在ES顶端相遇第16 章 - Lucene 写入流程
  • 官方换装规格,多种。支持证件照制作的api接口