vue3之 websoket发送消息

2024-01-27 02:28

本文主要是介绍vue3之 websoket发送消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

1.封装websoket

var ws = null; //建立的连接
var lockReconnect = false;//是否真正建立连接
var timeout = 6 * 1000 * 5;//30秒一次心跳
var timeoutObj = null;//心跳心跳倒计时
var serverTimeoutObj = null;//心跳倒计时
var timeoutnum = null;//断开 重连倒计时
var global_callback = null; //监听服务端消息
var openId = localStorage.getItem('openId')
// uri: 长链接地址<br>// jwt: 前后端连接凭证, 按需添加<br>// callback: 服务端消息回调函数
export function createWebscoket(uri, callback) {global_callback = callbackws = new WebSocket(uri)ws.onopen = () => {lockReconnect = truews.send(JSON.stringify({ "userId": openId, "toUserId": openId, "msgType": 0 }));//开启连接心跳start()}ws.onmessage = onMessagews.onerror = onError// ws.onclose = onClosews.onsend = onSend
}//发送消息
export function onSend(message) {console.log(`发送消息: ${message}`)console.log(ws.readyState)if (ws.readyState != 1) {reset()// reconnect()// ws.send(message)} else {ws.send(message)}}//接受服务端消息
// export function onMessage(res) {
//     let msgData = res ? res.data : {}
//     console.log(msgData)
//     if (typeof msgData != 'object') {
//         // var data = msgData.replace(/\ufeff/g, "");
//         var message = JSON.parse(msgData);
//         if (message.code == 0) {
//             return 
//         } else {
//             //重置心跳
//             reset()
//         }
//         //服务端消息回掉
//         // ws.onmessage()
//         global_callback(message)
//         // console.log(   ws.onmessage())
//     }
// }
export function onMessage(res){let msgData = res ? res.data : {}if (typeof msgData != 'object' && msgData != 'Connect success') {var data = msgData.replace(/\ufeff/g, "");var message = JSON.parse(data)//服务端消息回掉global_callback(message)//重置心跳reset()}}//连接失败
export function onError() {console.log('连接失败')ws.close()ws = nulllockReconnect = false
}//连接关闭
export function onClose() {console.log('连接关闭')
}
//断开关闭
export function closeWs() {if (lockReconnect) {ws.close()ws = nulllockReconnect = false}
}// 发送心跳
export function start() {timeoutObj && clearTimeout(timeoutObj);serverTimeoutObj && clearTimeout(serverTimeoutObj);timeoutObj = setTimeout(function () {//这里发送一个心跳,后端收到后,返回一个心跳消息if (ws.readyState == 1) { //如果连接正常ws.send(JSON.stringify({ "userId": openId, "toUserId": openId, "msgType": 0 }));// ws.send(data)} else {  //否则重连reconnect()}serverTimeoutObj = setTimeout(function () {//超时关闭ws.close();}, timeout);}, timeout + 3000)
}
//重置心跳
export function reset() {var that = this;//清除时间clearTimeout(timeoutObj);//清除时间clearTimeout(serverTimeoutObj);start(); //重启心跳
}//重新连接
export function reconnect() {if (lockReconnect) {return;};lockReconnect = true;//没连接上会一直重连,设置延迟避免请求过多timeoutnum && clearTimeout(timeoutnum);timeoutnum = setTimeout(function () {createWebscoket();//新连接lockReconnect = false;}, 5000);
}

2.页面调用

import { createWebscoket, onSend, closeWs, start } from '@/utils/socket.js'
onMounted(() => {let host = process.env.VUE_APP_WS_HOST //ws地址createWebscoket(host + token.value, messagesCallBack)})//新消息监听
const messagesCallBack = (msg) => {console.log(msg)
}//断开socket
const closeWsTxt = () => {closeWs()
}//发送socket消息到服务器
const sendMessagext = (data) => {onSend(JSON.stringify(data))
}

这篇关于vue3之 websoket发送消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/648803

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,