uni-app + SpringBoot +stomp 支持websocket 打包app
文章目录
- 一、概述:
- 二、配置:
- 1. 后端配置
- 2. uni-app(app端)
- 3. 使用
一、概述:
websocket 协议是在http 协议的基础上的升级,通过一次http 请求建立长连接,转而变为TCP 的全双工通信;而http 协议是一问一答的请求方式方式。
二、配置:
1. 后端配置
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {//注册STOMP协议的节点(endpoint),并映射指定的url//注册一个STOMP的endpoint,并指定使用SockJS协议// 此处配置支持PC 端浏览器,客户端访问采用http registry.addEndpoint("/websocket").setAllowedOriginPatterns("*").withSockJS();// 此处配置支持uniapp app 端打包,不要带withSockJS, 客户端访问 采用ws 协议registry.addEndpoint("/websocket-app").setAllowedOriginPatterns("*");}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {//配置消息代理(Message Broker)//广播式应配置一个/topic消息代理registry.enableSimpleBroker("/topic");}
}
2. uni-app(app端)
websocket-uni.js
let socketOpen = false;
let socketMsgQueue = [];
import http from "@/common/Http.vue";export default {client: null,baseURL: `ws://192.168.1.1:9109/websocket-app`,//uni-app使用时不能使用http不然监听不到,需要使用wsinit(headers) {if (this.client) {return Promise.resolve(this.client);}return new Promise((resolve, reject) => {const ws = {send: this.sendMessage,onopen: null,onmessage: null,close: this.closeSocket,};uni.connectSocket({url: this.baseURL,header: headers,success: function() {console.log("WebSocket连接成功");}});uni.onSocketOpen(function(res) {console.log('WebSocket连接已打开!', res);socketOpen = true;for (let i = 0; i < socketMsgQueue.length; i++) {ws.send(socketMsgQueue[i]);}socketMsgQueue = [];ws.onopen && ws.onopen();});uni.onSocketMessage(function(res) {console.log("回馈")ws.onmessage && ws.onmessage(res);});uni.onSocketError(function(res) {console.log('WebSocket 错误!', res);});uni.onSocketClose((res) => {this.client.disconnect();this.client = null;socketOpen = false;console.log('WebSocket 已关闭!', res);});const Stomp = require('./stomp.js').Stomp;Stomp.setInterval = function(interval, f) {return setInterval(f, interval);};Stomp.clearInterval = function(id) {return clearInterval(id);};const client = this.client = Stomp.over(ws);client.connect(headers, function() {console.log('stomp connected');resolve(client);});});},disconnect() {uni.closeSocket();},sendMessage(message) {if (socketOpen) {uni.sendSocketMessage({data: message,});} else {socketMsgQueue.push(message);}},closeSocket() {console.log('closeSocket');},
};
3. 使用
import WebSocket from '@/components/js/websocket-uni1.js';if (self.map.get("token")) {//需要上传tokenheaders.Authorization = self.map.get("token");}WebSocket.init(headers).then(client => {//接收反馈端口,成功方法,错误方法client.subscribe('/topic/getResponse', this.responseCallback, this.onFailed);});responseCallback: function(frame) {let self=this;let body = JSON.parse(frame.body);uni.showToast({icon:"success",icon: 'none',position:"center",title:"消息:您有一个新的消息,请注意接收"},2000)},onFailed: function(frame) {//this.$notify.error({// title: '系统错误',// message: '消息服务连接失败!',//});console.log('STOMP: ' + frame);},相关文章:
uni-app + SpringBoot +stomp 支持websocket 打包app
文章目录 一、概述:二、配置:1. 后端配置2. uni-app(app端)3. 使用 一、概述: websocket 协议是在http 协议的基础上的升级,通过一次http 请求建立长连接,转而变为TCP 的全双工通信;而http 协议是一问一答…...
LeetCode--HOT100题(35)
目录 题目描述:23. 合并 K 个升序链表(困难)题目接口解题思路1代码解题思路2代码 PS: 题目描述:23. 合并 K 个升序链表(困难) 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合…...
idea插件grep console最佳实践
首发博客地址 https://blog.zysicyj.top/ 参考博客:https://blog.csdn.net/ayunnuo/article/details/123997304 效果 配置 具体颜色 日志级别前景色背景色Error#FF0000#370000Warn#FFC033#1A0037Info#00FFF3无Debug#808080无 本文由 mdnice 多平台发布...
Android 12 源码分析 —— 应用层 二(SystemUI大体组织和启动过程)
Android 12 源码分析 —— 应用层 二(SystemUI大体组织和启动过程) 在前一篇文章中,我们介绍了SystemUI怎么使用IDE进行编辑和调试。这是分析SystemUI的最基础,希望读者能尽量掌握。 本篇文章,将会介绍SystemUI的大概…...
【C#】通用类型转换
【C#】通用类型转换 自动类型转换(隐式类型转换)强制类型转换(显式类型转换)通过函数进行转换(通过方法进行类型转换)使用 as 操作符转换通用类型转换方法实现 数据类型转换就是将数据(变量、数…...
传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析
1、DNS 服务器 DNS 服务器可以在一定程度上用作服务发现的机制,以下是其冲动服务发现的一些利弊 优势 广泛性: DNS是互联网的标准协议之一,已经广泛地被支持和使用。因此,使用DNS作为服务发现的机制可以借助现有的网络基础设施…...
js中数组常用操作函数
js数组经常会用到,当涉及到 JavaScript 数组的函数,有许多常用的函数可用于对数组进行操作和转换。以下是一些常见的数组函数的讲解 splice() splice() 函数用于修改数组,可以删除、插入或替换数组中的元素。 var fruits [apple, banana,…...
Windows、Mac、Linux端口占用解决
Windows、Mac、Linux端口占用解决 简介 在使用计算机网络时,经常会遇到端口被占用的问题。当一个应用程序尝试使用已经被其他程序占用的端口时,会导致端口冲突,使应用程序无法正常运行。本文将介绍在Windows、Mac和Linux操作系统上解决端口…...
企业文件透明加密软件——「天锐绿盾」数据防泄密管理软件系统
PC访问地址: 首页 一、文档透明加密软件 文档透明加密功能:在不影响单位内部员工对电脑任何正常操作的前提下,文档在复制、新建、修改时被系统强制自动加密。文档只能在单位内部电脑上正常使用,在外部电脑上使用是乱码或无法打…...
Postman接口自动化测试实例
一.实例背景 在实际业务中,经常会出现让用户输入用户密码进行验证的场景。而为了安全,一般都会先请求后台服务器获取一个随机数做为盐值,然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服务器,后台服务器接到…...
软件团队降本增效-构建人员评价体系
在软件团队中,最大成本往往来自于人力。这是因为软件开发是一项高度技术密集和智力密集的工作,需要研发人员具备较高的专业知识和技能。研发人员的工作状态和主动性对产出和质量具有极大的影响。如果研发人员缺乏积极性和投入度,可能会导致项…...
Python实现SSA智能麻雀搜索算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出&a…...
web JS高德地图标点、点聚合、自定义图标、自定义窗体信息、换肤等功能实现和高复用性组件封装教程
文章目录 前言一、点聚合是什么?二、开发前准备三、API示例1.引入高德地图2.创建地图实例3.添加标点4.删除标点5.删除所有标点(覆盖物)6.聚合点7.自定义聚合点样式8.清除聚合9.打开窗体信息 四、实战开发需求要求效果图如下:封装思…...
AlpacaFarm: A Simulation Framework for Methods that Learn from Human Feedback
本文是LLM系列文章,针对《》的翻译。 AlpacaFarm:从人类反馈中学习方法的模拟框架 摘要1 引言2 背景与问题描述3 构造AlpacaFarm4 验证AlpacaFarm模拟器5 AlpacaFarm的基准参考方法6 相关工作7 不足和未来方向 摘要 像ChatGPT这样的大型语言模型由于能够很好地遵循…...
【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)
🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛹Linux 🛸C 📕 学习格言:博观而约取ÿ…...
自己实现 SpringMVC 底层机制 系列之-实现任务阶段 5- 完成 Spring 容器对象的自动装配 -@Autowried
😀前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 5- 完成 Spring 容器对象的自动装配 -Autowried 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家&…...
linux的http服务
Web通信基本概念 基于B/S(Browser/Server)架构的网页服务 服务端提供网页 浏览器下载并显示网页 Hyper Text Markup Lanuage,超文本标记语言 Hyper Text Transfer Protocol,超文本传输协议 虚拟机A:构建基本的Web服务 [root…...
Restful架构简单了解
Restful Rest全称representational status transfer 表述性状态转移。 原则 资源与URI URI既可以看成是资源的地址,也可以看成是资源的名称。如果某些信息没有使用URI来表示,那它就不能算是一个资源, 只能算是资源的一些信息而已。URI的设计…...
conda常用命令
使用conda可以在电脑上创建很多套相互隔离的Python环境,命令如下: 创建环境 创建一个名为deeplearning的环境,python版本为3.7 conda create --name deeplearning python3.7查看版本 conda --version切换环境 切换到deeplearning环境 c…...
Linux:shell脚本:基础使用(6)《正则表达式-awk工具》
简介 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 1)awk命令会逐行读取文件的内容进行处理 2)a…...
开发者效率革命:用dotfiles打造可移植的个性化开发环境
1. 项目概述:dotfiles,开发者效率的基石 如果你在终端里敲命令时,总觉得默认的配置不够顺手,或者每次在新机器上都要花半天时间重新配置一遍开发环境,那“dotfiles”这个概念对你来说就是救星。jesuserro/dotfiles 这个…...
使用S32 Design Studio(S32DS)常见问题
S32DS常见问题如下:1. 编译器找不到ld文件工程路径不能有中文字符2. 编译器找不到make文件鼠标右键点击工程,在弹出菜单中点击 “Properties” 按钮,弹出属性对话框,点击 Tool Settings 选项卡,在左侧树状框中点击 C/C…...
5分钟搞定VRoid Studio中文界面:汉化插件完全使用指南
5分钟搞定VRoid Studio中文界面:汉化插件完全使用指南 【免费下载链接】VRoidChinese VRoidStudio汉化插件 项目地址: https://gitcode.com/gh_mirrors/vr/VRoidChinese 你是否因为VRoid Studio的全英文界面而感到困扰?作为一款功能强大的3D角色设…...
Google ADK实战:用Python代码构建可控、可测试的AI智能体系统
1. 项目概述:从代码出发,构建可控的智能体如果你正在寻找一个能让你用写代码的方式,从零开始构建、测试和部署复杂AI智能体的框架,那么Google开源的Agent Development Kit(ADK)Python版,绝对值得…...
Windows APK安装器完整指南:无需安卓手机直接安装应用
Windows APK安装器完整指南:无需安卓手机直接安装应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想要在Windows电脑上直接安装Android应用吗ÿ…...
【claude code agent 实践7】后台任务机制深度解析: 从S02到S08的演进
后台任务机制深度解析 文章目录后台任务机制深度解析🔄 s02 vs s08 核心变化对比🔍 新增核心逻辑详解1. BackgroundManager类(后台任务管理器)2. agent_loop关键变化 - 每次LLM调用前排空队列📊 后台任务完整工作流程图…...
小波散射网络:从理论优势到小样本图像分类实践
1. 小波散射网络为什么值得关注 第一次听说小波散射网络时,我和大多数搞机器学习的朋友反应一样:"这玩意儿和普通卷积神经网络(CNN)有什么区别?"直到去年接手一个医疗影像项目,手头只有200张标注…...
DocX安全特性完全指南:文档保护、密码加密和数字签名终极教程
DocX安全特性完全指南:文档保护、密码加密和数字签名终极教程 【免费下载链接】DocX Fast and easy to use .NET library that creates or modifies Microsoft Word files without installing Word. 项目地址: https://gitcode.com/gh_mirrors/doc/DocX DocX…...
终极指南:Windows上无需模拟器安装安卓应用的完整教程
终极指南:Windows上无需模拟器安装安卓应用的完整教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上运行安卓应用,但厌倦了…...
Nucleus MCP:构建AI智能体标准化工具层的核心架构与实践
1. 项目概述:一个为AI智能体打造的“工具箱”中枢最近在折腾AI智能体(Agent)开发的朋友,可能都遇到过类似的困境:你有一个绝佳的想法,想让AI去调用某个API、查询数据库,或者操作一个本地工具。你…...
