项目中遇到的问题

1、文件上传

背景:
项目基于jquery,文件列表中有文件上传功能,点击上传按钮,弹出模态框,在模态框的形式选择文件,进行上传。

遇到的问题:

  1. 无法关闭模态框,进而无法切换页面,无法进行其他操作(关闭模态框,无法查看文件上传的进度)
  2. 大文件上传时,中间如果失败了,需要重头开始上传,使用不友好

解决方法:

  1. 将模态框改为普通弹框,显示在页面最上方,可以进行拖拽、放大和缩小

在盒子里拖拽:
$( "#draggable3" ).draggable({ containment: "#containment-wrapper", scroll: false });
在父元素内拖拽:
$( "#draggable5" ).draggable({ containment: "parent" });

  1. 对大文件进行切片上传和断点续传,见文件上传笔记
  2. 后期将 juqery 改为 vue ,单页面应用,切换页面,不回影响上传弹框

2、websocket

背景: 开发一个站内信的功能,要求要实时通讯,选择使用 websocket 进行前后端通信。

步骤:

  • 实例化一个 WebSocket: new WebSocket(url),url 中,如果是 http 协议就使用 ws,如果是 https 就使用 wss
  • 使用 onopen方法建立连接
  • 通过 onmessage 获取后端传给前端的数据
  • 通过 send 给后端传递数据
  • 通过 onerror onclose 去做其他的一些处理

问题: 经测试,某些情况下连接会断开

解决: 使用心跳检查,协定好前后端传递的数据、前后端穿数据的时间间隔、连接最大次数

  • 每隔一定的时间,前端给后端传递一个协定好的字段,如ping
  • 后端接收到这个字段后,给前端返回一个协定好的字段,如pong
  • 在上面的过程中,如果超过指定的时间,后端还没有返回需要的字段,前端就要尝试重新连接
  • 如果超过最大的连接次数,就不在进行重连,否则接续尝试连接,直到连上为止
connectWebSocket () {if(window.webSocket == undefined || window.webSocket == null) {// socket 地址var url = 'ws://' + websocketUrl + account;// 实例化 WebSocket 对象window.webSocket = new WebSocket(url);// 建立 WebSocket 连接window.webSocket.onopen = () => {_that.longstart(); // 成功建立连接后,创建心跳检测};// 前端获取到后端通过 onmessage 返回到数据window.webSocket.onmessage = (evt) => {_that.longstart(); //心跳重置}// 监听连接失败window.webSocket.onerror = () => {this.websocketonerror("webSocket.onerror")};// 监听连接关闭window.webSocket.onclose = () => {this.websocketonerror("webSocket.onclose")}} else {this.retryNum ++;window.webSocket = nullthis.websocketonerror() //连接失败时,进行重连}
}websocketonerror() {this.retryNum <= 6 && this.connectWebSocket();  //失败、关闭重连
},
// 心跳检测
longstart() {//1、通过关闭定时器和倒计时进行重置心跳this.retryNum = 0;clearInterval(this.timeoutObj)clearTimeout(this.serverTimeoutObj);// 2、每隔10s向后端发送一条商议好的数据this.timeoutObj = setInterval(()=>{if(this.retryNum <= 6) {  //只允许重试6// console.log('监测心跳')let data='{"body": "pong","direct":"request"}'window.webSocket && window.webSocket.send(data);// 3、发送数据 5s后没有接收到返回的数据进行关闭websocket重连this.serverTimeoutObj = setTimeout(()=>{this.lockReconnect = true;this.retryNum ++;// console.log("后台挂掉,没有心跳了....,重试了"+this.retryNum+"次");if(window.webSocket) {window.webSocket.close();}}, 5000);} else {clearInterval(this.timeoutObj)clearTimeout(this.serverTimeoutObj);}},10000)
},
destroySocket() {if (window.webSocket) {window.webSocket.close(); // 离开路由之后断开websocket连接}clearInterval(this.timeoutObj);clearTimeout(this.serverTimeoutObj);
}

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

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

相关文章

LeetCode 算法笔记-第 04 章 基础算法篇

1.枚举 采用枚举算法解题的一般思路如下&#xff1a; 确定枚举对象、枚举范围和判断条件&#xff0c;并判断条件设立的正确性。一一枚举可能的情况&#xff0c;并验证是否是问题的解。考虑提高枚举算法的效率。 我们可以从下面几个方面考虑提高算法的效率&#xff1a; 抓住…

js中两种异步方式:async+await以及then

第一种方式 第二种方式 完整代码 前端代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>pywebv…

重学SpringBoot3-SpringApplicationRunListener

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringApplicationRunListener 1. 基本作用2. 如何实现2.1. 创建SpringApplicationRunListener2.2. 注册SpringApplicationRunListener2.3. 完整示例 3.…

【机器学习】经典数据集鸢尾花的分类识别

【机器学习】经典数据集鸢尾花的分类识别 1、数据集介绍1.1 数据集详情 2、实验内容2.1 准备数据集2.2 创建颜色映射对象2.3 绘制特征散点图2.4 数据的归一化2.5 数据的标准化 3、实验截图提取萼片长度与萼片宽度分类提取萼片长度与花瓣长度分类提取萼片长度与花瓣宽度分类提取…

【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(一)

目录 1 -> 初识JavaScript 1.1 -> JavaScript是什么 1.2 -> 发展历史 1.3 -> JavaScript和HTML和CSS之间的关系 1.4 -> JavaScript运行过程 1.5 -> JavaScript的组成 2 -> 前置知识 2.1 -> JavaScript的书写形式 2.2 -> 注释 2.3 -> 输…

使用OpenCV进行模糊检测(拉普拉斯算子)

参考&#xff1a; 使用OpenCV进行模糊检测&#xff08;拉普拉斯算子&#xff09; 代码&#xff1a; # import the necessary packages from imutils import paths import argparse import cv2 import osdef variance_of_laplacian(image):# compute the Laplacian of the ima…

ISSTA 2024盛大开幕:中国学者的录取数和投稿量均位列第一

随着夏日的尾声&#xff0c;全球软件测试领域的专家和学者齐聚在奥地利维也纳。共同参与这场科技盛宴——ISSTA 2024。这场国际会议正如火如荼地进行中&#xff0c;吸引了来自世界各地的专业人士参与。 会议实况&#xff1a; 9月16日与17日&#xff0c;大会安排了丰富的社交活…

把设计模式用起来!(3)用不好模式?之时机不对

上一篇&#xff1a;《把设计模式用起来&#xff08;2&#xff09;——用不好&#xff1f;之实践不足》 本篇继续讲设计模式用不好的常见原因&#xff0c;这是第二个&#xff1a;使用设计模式的时机不对。 二、时机不对 这里说的时机并不是单纯指软件研发周期中的时间阶段&…

使用rust自制操作系统内核

一、系统简介 本操作系统是一个使用rust语言实现&#xff0c;基于32位的x86CPU的分时操作系统。 项目地址&#xff08;求star&#xff09;&#xff1a;GitHub - CaoGaorong/os-in-rust: 使用rust实现一个操作系统内核 详细文档&#xff1a;自制操作系统 语雀 1. 项目特性 …

数据库加密算法

功能简介 对数据库字段进行加密,如下图: 一、yml配置 注意: MD5_32 MD5_16 BASE64 AES SM2 SM3 SM4 需要 password(14位 ,26位, 32 位) 就行 非对称算法如:SM2,RSA, 需要配置 密码:password 公钥:publicKey 私钥:privateKey yml: # 数据加密 mybatis-encry…

【新手/小白教程】打开一个vue项目的前置准备,nvm安装指定版本node

目录 一、前言二、nvmnvm介绍nvm下载与安装1. 官网下载 nvm 包2. 安装 nvm-setup.exe3. 配置路径和下载镜像4. 检查nvm是否安装完成5. 错误情况 三、nodenode版本查看node命令 一、前言 在换新电脑的时候总是需要把所有东西重新安装配置&#xff0c;这篇用来记录一下打开一个v…

vmware中的ubuntu系统扩容分区

1.虚拟机关机 右击虚拟机/设置&#xff0c;进入虚拟机设置 3.启动虚拟机&#xff0c;进入命令行 4.fdisk -l查看要扩展的分区名 5.resize要扩容的分区 su root parted /dev/sda resizepart 3 100% fdisk -l resize2fs /dev/sda3 df -T完成 6.其他 进入磁盘管理 fdisk /d…

【深度智能】:迈向高级时代的人工智能全景指南

​ ​ 前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;人工智能立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 第一阶段&#xff1a;基础知识 1. 计算机科…

Kotlin 中的 `flatMap` 方法详解

在 Kotlin 中&#xff0c;flatMap 是一个非常强大的集合操作函数&#xff0c;它结合了 map 和 flatten 的功能。flatMap 能够将一个集合中的每个元素映射为另一个集合&#xff0c;然后将这些集合连接成一个单一的集合。在很多场景下&#xff0c;它比单独使用 map 和 flatten 更…

时空大数据平台:激活新质生产力的智慧引擎

在数字化转型的浪潮中&#xff0c;时空大数据平台以其独特的价值&#xff0c;成为推动新质生产力发展的关键力量。本文不仅深入剖析时空大数据平台的定义与内涵&#xff0c;探讨其在智慧城市、智慧农业、环境管理、应急管理等领域的应用成效&#xff0c;还将详尽阐述平台如何通…

iPhone 16系列:摄影艺术的全新演绎,探索影像新境界

在科技的浪潮中&#xff0c;智能手机摄影功能的进化从未停歇。 苹果公司即将推出的iPhone 16系列&#xff0c;以其卓越的相机升级和创新特性&#xff0c;再次站在了手机摄影的前沿。 从硬件到软件&#xff0c;从拍照体验到图像处理&#xff0c;iPhone 16系列都展现了其在移动…

Windows下安装部署RocketMQ

Windows下安装部署RocketMQ 引言下载安装rocketmq配置环境变量启动NameServer启动Brokerrocketmq控制台[rocketmq-dashboard](https://github.com/apache/rocketmq-dashboard)安装及配置修改rocketmq记录日志地址设置namesrv、broker堆栈内存RocketMQ注册为Windows服务start.ba…

pod基本概念

一 、Pod Pod 是 kubernetes 基本调度单位。每个 Pod 中可以运 行一个或多个容器&#xff0c;共享 Pod 的文件系统、IP 和网络等 资源&#xff0c;每个 Pod 只有一个 IP。 1. 创建 Pod 声明式文件方式创建 Pod&#xff0c;支持 yaml 和 json 创建 pod 测试访问 2. 更改 Pod 的…

解决phpstudy无法启动MySQL服务

三种方法 如果说你在小皮里面&#xff0c;启动mysql&#xff0c;发现启动不了&#xff0c;而且你在你自己电脑本地有装过mysql服务&#xff0c;那么可以按照我下面的不走来&#xff0c;按顺序试验1&#xff0c;2&#xff0c;3,三个里面肯定有一个是可以解决的 1.停止本地的mysq…

EasyExcel 快速入门

目录 一、 EasyExcel简介 官网链接&#xff1a; 代码链接&#xff1a; 二、 EasyExcel快速上手 引入依赖&#xff1a; 设置Excel相关注解 编写对应的监听类&#xff1a; 简单写入数据&#xff1a; 简单读取数据&#xff1a; 不需要使用监听器&#xff1a; 需要使…