您的位置:

微信小程序 Websocket详解

一、WebSocket 概述

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 可以在浏览器和服务器之间建立实时的双向通信,相比传统的 HTTP,有更低的延迟和更高的效率。

WebSocket 在建立连接时,需要进行握手协议,握手过程的 header 信息显示 WebSocket 支持的协议。客户端请求建立 WebSocket 连接时,请求头部包含了 Upgrade 和 Connection,服务器端返回的头部信息中也包含了 Upgrade 和 Connection。

客户端和服务器端使用一致的 WebSocket 生命周期管理,通信效率高,性能优越,操作简单。

二、WebSocket 在小程序中的应用

在小程序开发中,可以利用微信开发者工具提供的模拟 websocket 功能完成初步的开发,同时在实际项目中需要使用到后端接口的支持,可以使用 Springboot 及 WebSocket 包括STOMP的技术。

使用微信小程序中的 WebSocket,在前端中通过JS提供的 WebSocket 接口来建立 WebSocket 连接,并通过 WebSocket 接口提供的方法向服务器发送消息或者接收服务器下发的消息。使用 WebSocket 接口发送消息时,调用 send() 方法,使用 onmessage() 方法接收消息。

三、示例代码

前端代码

var socketOpen = false 
var socketMsgQueue = [] 
const URL = 'wss://xxx.xxx.xxx.xxx:xxxx' //WebSocket 地址

wx.connectSocket({
  url: URL,
  success: function () {
    console.log('WebSocket连接成功')
  },
  fail: function () {
    console.log('WebSocket连接失败')
  }
})

wx.onSocketOpen(function (res) {
  console.log('WebSocket连接已打开!')
  socketOpen = true 
  for (var i = 0; i < socketMsgQueue.length; i++) {
    sendSocketMessage(socketMsgQueue[i])
  }
  socketMsgQueue = []
})

wx.onSocketMessage(function (res) {
  console.log('收到服务器内容:' + res.data)
})

wx.onSocketClose(function (res) {
  console.log('WebSocket 已关闭!')
  socketOpen = false
})

function sendSocketMessage(msg) {
  if (socketOpen) {
    wx.sendSocketMessage({
      data: msg
    })
  } else {
    socketMsgQueue.push(msg)
  }
}

后端WebSocket配置

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Autowired
    private WebSocketInterceptor webSocketInterceptor;

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws")
                .setAllowedOrigins("*")
                .addInterceptors(webSocketInterceptor)
                .withSockJS();
    }

}

四、小结

本文就微信小程序 WebSocket 进行了详细的讲解,并提供了相关的示例代码。WebSocket 大大提升了前后端通信效率和性能,对于实时性要求较高的页面和应用,可以使用 WebSocket 协议。

微信小程序 Websocket详解

2023-05-20
微信小程序WebSocket详解

2023-05-17
微信小程序WebSocket用法详解

2023-05-20
微信小程序云开发nodejs(微信小程序云开发是免费的吗)

本文目录一览: 1、微信小程序开发定制怎么做 2、小程序开发是用什么语言? 3、利用小程序进行云开发必须安装node.js吗 4、零基础学习微信小程序开发,之前需要学习哪些知识,谢谢 5、如何开发小程

2023-12-08
微信小程序 MQTT 入门指南

2023-05-19
微信小程序php开发,微信小程序php后端搭建

2023-01-06
微信小程序js动画,微信小程序各种动画

本文目录一览: 1、微信小程序—用动画实现自定义轮播图 2、重磅:微信小程序发布WeUI.js 官方视觉组件库! 3、微信小程序之自定义模态弹窗(带动画)实例 微信小程序—用动画实现自定义轮播图 新接

2023-12-08
微信小程序js动画,微信小程序各种动画

本文目录一览: 1、微信小程序—用动画实现自定义轮播图 2、重磅:微信小程序发布WeUI.js 官方视觉组件库! 3、微信小程序之自定义模态弹窗(带动画)实例 微信小程序—用动画实现自定义轮播图 新接

2023-12-08
js和微信小程序(js和微信小程序关联)

本文目录一览: 1、重磅:微信小程序发布WeUI.js 官方视觉组件库! 2、微信小程序wxml中使用js函数 3、微信小程序wxs的使用(当页面数据渲染前添加js操作) 4、怎样用js开发微信小程序

2023-12-08
印象笔记记录java学习(Java成长笔记)

2022-11-12
微信小程序js改变dom(微信小程序appjs)

本文目录一览: 1、微信小程序 动态修改元素class 2、微信小程序点击切换class 3、微信小程序怎么将EBD格式的文件转化成json? 4、微信小程序不能操作dom吗 5、微信小程序怎么开发

2023-12-08
php开发微信小程序步骤,thinkphp开发微信小程序

2022-11-28
微信小程序上传详解

2023-05-18
java方法整理笔记(java总结)

2022-11-08
微信小程序字体大小调整

2023-05-16
微信小程序地图开发详解

2023-05-18
发篇java复习笔记(java课程笔记)

2022-11-09
微信小程序人脸识别详解

2023-05-18
微信小程序js上下文,微信小程序appjs

本文目录一览: 1、微信小程序是用什么技术实现的? 2、微信小程序的index.js怎么写?详细代码见下方↓ 3、微信小程序wxs的使用(当页面数据渲染前添加js操作) 4、怎样用js开发微信小程序

2023-12-08
微信小程序第三方js(微信小程序第三方支付平台)

本文目录一览: 1、怎样使用微信小程序的第三方js库? 2、重磅:微信小程序发布WeUI.js 官方视觉组件库! 3、微信小程序平台开发需要哪些技术 4、微信小程序是用什么技术实现的? 5、微信小程序

2023-12-08