uni-app+vue3 +uni.connectSocket 使用websocket

前言

  • 最近在uni-app+vue3+websocket实现聊天功能,在使用websocket还是遇到很多问题

  • 这次因为是app手机应用,就没有使用websocket对象,使用的是uni-app的uni.connectSocket

  • 为了方便测试这次用的是node.js一个简单的dom,来联调模拟发数据,过程有意思

首先模拟一个node.js服务来测试-代码实现

1.在桌面建立一个空文件夹-命名英文

2.打开cmd

3.初始化-下包

// 初始化包
npm init -y
​
// 下载node框架包
npm i express --save
​
// 下载websocket模块
npm i ws

4.回到项目根文件创建根文件-app.js-代码如下

// 引入express框架
var app = require('express')();
var server = require('http').Server(app);
​
// 引入ws框架支持webSocket实现
var WebSocket = require('ws');
​
// 针对8080接口进行监听
var wss = new WebSocket.Server({ port: 8080 });
​
// 当建立连接后,打印日志
wss.on('connection', function connection(ws) {
​console.log('建立连接');// 同时返回服务端收到的信息ws.on('message', function incoming(message) {// const buffer = Buffer.from(message,'hex')// console.log('ddd',buffer.toString('utf-8'));// console.log('message',message);console.log('接受前端消息: %s', message);});
​// 返回信息ws.send('接收到消息了');
});
​
// 绑定访问地址
app.get('/', function (req, res) {res.sendfile(__dirname + '/index.html');
});
​
app.listen(3000);

5.来到终端运行服务

node ./app.js

6.websocket服务地址

本机ip+3000端口

来到uni-app+vue3项目

1.来到工具文件utils下创建websocket.js 文件-代码如下

import {ref
} from "vue"
​
​
const websoket = ref(null);
​
​
const webSoketInit = (role, id) => {
​const wsUrl = "ws://localhost:8080"
​// return Promise
​websoket.value = uni.connectSocket({url: wsUrl,success: () => {console.log('websoket连接成功');},fail: () => {console.log('websoket连接失败');uni.showToast({title: 'websoket连接失败',icon: 'error',duration: 2000,});},});
​websoket.value.onOpen((res) => {if (websoket.value.readyState === 1) {websoket.value.send({data: '测试回复',})}
​});
​websoket.value.onClose(() => {console.log('已经被关闭了');});
​websoket.value.onMessage((res) => {console.log('接收到后端发送消息', res);});
​
};
​
// 获取websocket对象
const getWebSocket = () => {return websoket
};
​
​
// 关闭websocket【离开这个页面的时候执行关闭
const closeSocket = () => {websoket.value.close({success(res) {this.is_open_socket = false;console.log('关闭成功', res);},fail(err) {console.log('关闭失败', err);},});
};
​
const sendMessage = (message) => {console.log("发送消息", message)
​if (websoket.value.readyState === 1) {websoket.value.send({data: message,})}
};
export {getWebSocket,websoket,webSoketInit,closeSocket,sendMessage,
};

2.来到任意页面-初始化建立连接

<script setup>import {nextTick} from "vue"
​import {onLoad,onReady} from "@dcloudio/uni-app";
​
​// websocket 通讯import {getWebSocket,websoket,webSoketInit,closeSocket,sendMessage} from "@/utils/webSocket.js"
​// 判断当前视口大小onLoad((options) => {webSoketInit()})onReady(() => {​// 获取websocket对象let ws = getWebSocket()
​
​// 接受后端消息触发ws.value.onMessage((e) => {console.log('接受后端消息', e);})})
</script>

3.如图-代码效果

注意细节

1.前端使用websoket.value.send() 发送消息时后端接收一直都是undefined

  • 因为我们不是使用的浏览器的websocket对象,使用的是uni-app封装过一层的uni.connectSocket

  • 想在我们的实例对象是uni.connectSocket,需要按照uni-app的格式发送数据({data:'数据'})

  • 官网地址-uni.connectSocket(OBJECT) | uni-app官网

  • 如图

2.真机模拟时发现只有运行连接成功接收到消息,再用按钮触发后端服务也收不到消息-连接是成功的

  • 因为本机运行到浏览器测试时,是可以访问到自己内网服务

  • 真机运行虽然也是局域网连接wifi-但手机机制可能只会去公网上找-意思就是服务要上线


总结:

经过这一趟流程下来相信你也对 uni-app+vue3 +uni.connectSocket 使用websocket 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Flume Agent内部原理

Apache Flume Agent内部原理 Apache Flume 是一个可扩展的、分布式的日志收集、聚合和传输系统。在 Flume 中&#xff0c;Agent 是一个独立的进程&#xff0c;负责接收、传输和处理数据。Agent 内部包含多个组件&#xff0c;每个组件都有不同的功能和责任。 1. Source&#xff…

三下乡社会实践投稿攻略在这里

在当今信息爆炸的时代&#xff0c;如何让自己的声音被更多人听到&#xff0c;成为许多人和企业所关心的问题。其中&#xff0c;向各大媒体网站投稿&#xff0c;成为了一种常见的宣传方式。但是&#xff0c;如何投稿各大媒体网站&#xff1f;新闻媒体发文策略又有哪些呢&#xf…

光耦推荐—高速风筒方案中用到哪些光耦型号

高速风筒是现代生活中常见的电器设备&#xff0c;广泛应用于家庭、商业和工业领域&#xff1b;光耦是一种能够将输入信号转换成输出信号的元器件&#xff0c;其作用在于将电气信号转换成光信号&#xff0c;从而实现电路的隔离和保护&#xff1b;采用光耦可实现对风机转速和温度…

【管理咨询宝藏99】离散制造智能工厂战略规划方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏99】离散制造智能工厂战略规划方案 【格式】PDF版本 【关键词】智能制造、先进制造业转型、数字化转型 【核心观点】 - 推进EHS、品质一致性、生…

Failed to start tomcat.service: Unit is not loaded properly: Bad message 如何解决?

错误 “Failed to start tomcat.service: Unit is not loaded properly: Bad message” 通常意味着的 tomcat.service systemd 配置文件存在语法错误或配置不正确。为了解决这个问题&#xff0c;一步步检查和修正这个服务文件。 1. 检查 tomcat.service 文件 首先&#xff0c…

CSS文字描边,文字间隔,div自定义形状切割

clip-path: polygon( 0 0, 68% 0, 100% 32%, 100% 100%, 0 100% );//这里切割出来是少一角的正方形 letter-spacing: 1vw; //文字间隔 -webkit-text-stroke: 1px #fff; //文字描边1px uniapp微信小程序顶部导航栏设置透明&#xff0c;下拉改变透明度 onP…

SQL注入(sqli-labs第一关)

sqli-labs第一关 方法一&#xff1a;手工注入 来到第一关&#xff0c;图上说我们需要一个数字的参数 于是我们先手工注入?id1 and 11 跟?id1 and 12发现页面没有报错 每张截图上面页面中有select查询语句&#xff0c;这是我在第一关的源码中加上了echo "$sql ";…

SSM【Spring SpringMVC Mybatis】——Mybatis(二)

如果对一些基础理论感兴趣可以看这一期&#x1f447; SSM【Spring SpringMVC Mybatis】——Mybatis 目录 1、Mybatis中参数传递问题 1.1 单个普通参数 1.2 多个普通参数 1.3 命名参数 1.4 POJO参数 1.5 Map参数 1.6 Collection|List|Array等参数 2、Mybatis参数传递【#与…

STL——stack容器【栈】

stack基本概念&#xff1a; 概念&#xff1a; 是一种先进后出的数据结构&#xff0c;它只有一个出口 因为只有一端可以调用&#xff0c;所以栈不支持遍历操作 栈的操作&#xff1a; 栈中进入数据称为&#xff1a;入栈(push) 栈中弹出数据称为&#xff1a;出栈(pop) 生活中…

C#编程模式之享元模式

创作背景&#xff1a;各位朋友&#xff0c;我们继续学习C#的编程模式&#xff0c;本文主要介绍享元模式。享元模式是一种结构型设计模式&#xff0c;它主要用于减少创建对象的数量&#xff0c;从而提高程序性能。它通过共享对象的方式来减少内存的使用&#xff0c;特别是系统中…

【多客陪玩】陪玩小程序源码APP+小程序+公众号开发 -源码交付,线下可爆改家政,整理师等功能

简述 随着电竞行业的快速发展&#xff0c;电竞陪玩APP正在逐渐成为用户在休闲娱乐时的首选。为了吸引用户和提高用户体验&#xff0c;电竞陪玩APP开发需要定制一些特色功能&#xff0c;并通过合适的盈利模式来获得收益。本文将为您介绍电竞陪玩APP开发需要定制的特色功能以及常…

深入学习指针3

目录 前言 1.二级指针 2.指针数组 3.指针数组模拟二维数组 前言 Hello,小伙伴们我又来了&#xff0c;上期我们讲到了数组名的理解&#xff0c;指针与数组的关系等知识&#xff0c;那今天我们就继续深入到学习指针域数组的练联系&#xff0c;如果喜欢作者菌生产的内容还望不…

Python GraphQL服务器实现库之tartiflette使用详解

概要 Tartiflette是一个为Python编写的GraphQL服务器实现,它建立在现代异步编程库如asyncio之上,提供了高性能的GraphQL执行环境。Tartiflette专注于提供最佳的开发者体验,支持最新的GraphQL特性。 安装 安装Tartiflette相对简单,但需要依赖于一些系统级的库。 首先,需…

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…

Python爬虫实战:爬取【某旅游交通出行类网站中国内热门景点】的评论数据,使用Re、BeautifulSoup与Xpath三种方式解析数据,代码完整

一、分析爬取网页&#xff1a; 1、网址 https://travel.qunar.com/2、 打开网站&#xff0c;找到要爬取的网页 https://travel.qunar.com/p-cs299979-chongqing进来之后&#xff0c;找到评论界面&#xff0c;如下所示&#xff1a;在这里我选择驴友点评数据爬取点击【驴友点评…

腾讯共享WiFi项目的加盟方式有哪些?

在这个互联互通的时代&#xff0c;共享经济的浪潮正以前所未有的力量席卷全球&#xff0c;而腾讯作为中国互联网巨头之一自然不会错过这场盛宴。其推出的腾讯共享WiFi项目自问世以来就备受瞩目&#xff0c;它不仅为用户提供便捷的上网服务&#xff0c;更为创业者打开了一个全新…

untiy 为预制体动态加载光照贴图

unity版本为2021.8 预制体不能携带光照贴图信息&#xff0c;只能我们自己准备了 多方查找加自己摸索终于找到了适合新版本的解决方案&#xff0c;直接贴代码 将这个脚本挂到预制体的最上级 using System.Collections; using System.Collections.Generic; using UnityEditor; …

美颜SDK是什么?深度学习技术在直播美颜SDK中的应用探析

美颜SDK的出现为直播、视频通话等应用提供了强大的美颜功能。接下来&#xff0c;我们将一同探讨美颜SDK的概念&#xff0c;以及深度学习技术在直播美颜SDK中的应用。 一、什么是美颜SDK&#xff1f; 美颜SDK是一种软件开发工具包&#xff0c;旨在为开发者提供便捷而强大的美颜…

四大误区:中台产品时设计你中招了几个?

01 误区一&#xff1a;管理系统分析工具数字化中台 传统企业在经营管理过程中会根据业务或管理需求&#xff0c;不断添加和升级诸如OA、CRM等不同类别的管理系统。 为了更好地响应前台的业务需求&#xff0c;有些企业成立了新的或扩大、加强了原有的技术部门&#xff0c;由…

C#上位机1ms级高精度定时任务

precisiontimer 安装扩展包 添加引用 完整代码 using PrecisionTiming;using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; us…