微信小程序-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.mfbz.cn/a/884134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探讨TikTok直播专线的必要性

随着社交媒体的迅速发展,短视频平台如TikTok(在中国抖音)已成为现代人生活中不可或缺的一部分。TikTok的直播功能因其即时性和互动性受到广泛喜爱,但在中国市场上,主播们在使用这一功能时面临不少挑战,其中…

优选拼团平台架构解析与关键代码逻辑概述

一、系统架构设计 唐古拉优选拼团平台采用多层架构设计,主要包括前端展示层、业务逻辑层、数据访问层及数据存储层。 前端展示层:负责用户界面的展示和交互,包括商品列表、拼团详情、订单管理等页面。前端采用现代前端框架(如Vue…

【Linux】图解详谈HTTPS的安全传输

文章目录 1.前置知识2.只使用对称加密3.只使用非对称加密 因为私钥加密只能公钥解开,公钥加密只能私钥解开4.双方都是使用非对称加密5.非对称加密 对称加密6.非对称加密对称加密CA认证(一)CA认证(二)https &#xff0…

信息学奥赛的最佳启蒙阶段是小学还是初中?

信息学奥赛(NOI)近年来越来越受家长和学生的关注,尤其是在编程教育不断升温的背景下,信息学竞赛成为了许多家庭的教育选择之一。家长们往往关心的是:孩子应该在什么年龄段开始接触信息学竞赛,才能打下坚实的…

ArcEngine C#二次开发图层处理:根据属性分割图层(Split)

需求:仅根据某一属性,分割图层,并以属性值命名图层名称保存。 众所周知,ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层,以属性值命名图层,如下图所示。 本文仅仅依据属性值,将一个shp…

统信服务器操作系统【qcow2 镜像空间扩容】方案

使用 qcow2 镜像安装系统,当默认安装系统存储空间不够用时,进行自定义扩容 文章目录 准备环境扩容步骤一、检查环境信息1.查看镜像信息2.查看镜像分区信息3.确认需要扩容的分区名二、扩容1.备份镜像2.创建新的镜像文件,并指定空间3.将系统扩容到新的镜像三、扩容 lvm 分区四…

自然语言处理实战项目:从理论到实现

一、引言 自然语言处理(NLP)是计算机科学、人工智能和语言学交叉的领域,旨在让计算机能够理解、处理和生成人类语言。随着互联网的飞速发展,大量的文本数据被产生,这为自然语言处理技术的发展提供了丰富的素材&#xf…

从响应到预见:前瞻性客户服务策略的实践与探索

在快速变化的商业环境中,客户服务已不再是简单的需求响应与问题解决,它正逐步演变为企业竞争力的核心要素之一。传统的“响应式”服务模式虽能满足基本的客户需求,但在追求极致客户体验和构建长期忠诚度的今天,显然已显不足。因此…

使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

文章目录 一、介绍?二、什么是 Puppeteer-Cluster?三、为什么代理在网络抓取中很重要?四、 为什么使用带代理的 Puppeteer-Cluster?五、分步指南: 带代理的 Puppeteer 群集5.1. 步骤 1:安装所需程序库5.2. …

ERROR:start workflow error,dolphinscheduler log重复刷屏(死循环)直至磁盘存满

在使用ds过后发现,我虚拟机中的磁盘内存全部沾满了 查看目录下大于100M的文件: find / -size 100M 查看后发现问题在于ds产生的日志文件特别大而且多, 查看日志后发现日志中一直都在死循环错误:start workflow error 等 其中文件…

命令行gcc -v和g++ -v输出版本不一致

命令行gcc -v和g -v输出版本不一致 前言:本文初编辑于2024年9月27日 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www.cnblogs.com/hassle 博客园本文链接:https://www.cnblogs.com/hassle/p/18435916 赞美大…

Java ERP管理系统源码解析:微服务架构实践Spring Cloud Alibaba与Spring Boot

在当今数字化浪潮的推动下,企业对于高效、稳定且易于扩展的管理系统需求日益增长。为了满足这一需求,我们精心打造了一款基于Java技术的鸿鹄ERP(Enterprise Resource Planning)管理系统。该系统充分利用了Spring Cloud Alibaba、S…

局域网广域网,IP地址和端口号,TCP/IP 4层协议,协议的封装和分用

前言 在古老的年代,如果我们要实现两台机器进行数据传输, A员工就得去B员工的办公电脑传数据(B休息,等A传完),这样就很浪费时间 所以能不能不去B的工位的同时,还能传数据。这时候网络通信就出来…

一文彻底掌握inout双向端口

inout端口信号在FPGA中应用还是很广泛的,特别是一些总线通信、数据交互的场景,比如i2c、spi等等。 一、inout的基本概念 Inout 端口的实现基础是三态门。 三态门具有三种输出状态,即高电平、低电平以及高阻态(Z)。 …

K8S:开源容器编排平台,助力高效稳定的容器化应用管理

云计算de小白 Kubernetes(简称K8s)是一个开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。 K8S诞生于Google,基于其多年在生产环境运行容器的经验,目前已成为现代微服务架构和云原生应用的核心技术。 图…

Leetcode 707. 设计链表

1.题目基本信息 1.1.题目描述 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性…

代码随想录冲冲冲 Day58 图论Part9

47. 参加科学大会(第六期模拟笔试) 根据昨天的dijkstra进行堆优化 使用的原因是点多但边少 所以直接对于边进行操作 1.对于priority_queue来说 这是最小堆, 小于的话就是最大堆 之后由于是根据边来说的 所以新建一个Edge并且初始化一下 之后由于使用…

数字孪生赋能BMS:开启电池管理新纪元

这几天,全世界的媒体几乎都在报道黎巴嫩爆炸案。原本此类地缘冲突的影响力是较为有限的,但是这次的事件不太一样:这次爆炸的,是几千个传呼机。 这一事件迅速引发了全球范围内对于电子设备安全性的广泛关注:随着社会日…

[EBPF] 实时捕获DM数据库是否存在SQL阻塞

1. 介绍 eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网…

如何选择数据库架构

选择合适的数据库架构是一个复杂的过程,它取决于多种因素,包括应用程序的需求、数据量的大小、并发访问量、数据一致性要求、预算以及技术团队的熟悉程度等。以下是一些关键的步骤和考虑因素,帮助你选择合适的数据库架构: 1. 分析…