当前位置: 首页 > news >正文

项目中遇到的问题

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);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【论文阅读】Face2Diffusion for Fast and Editable Face Personalization
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(五)-聚合
  • GitHub每日最火火火项目(9.20)
  • 【简单点】docker如何部署tomcat
  • 线程池的类型
  • 掌握顶会流量密码!“Mamba+CNN”双热点组合!轻松找到创新点!
  • EP21 Promise封装request请求
  • Java企业面试题3
  • 数据结构—单链表
  • 让医院更智慧,让决策更容易
  • LeetCode_sql_day30(1264.页面推荐)
  • ROS学习笔记13——rosbag功能包的简单使用
  • 【自动化测试】常见的自动化遍历工具以及如何选择合适的自动化遍历工具
  • 1、vectorCast单元测试常用操作
  • 关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • angular组件开发
  • express如何解决request entity too large问题
  • flutter的key在widget list的作用以及必要性
  • HTML-表单
  • HTTP 简介
  • IndexedDB
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java IO学习笔记一
  • maven工程打包jar以及java jar命令的classpath使用
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql innodb 索引使用指南
  • PHP那些事儿
  • V4L2视频输入框架概述
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 动态规划入门(以爬楼梯为例)
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 开源地图数据可视化库——mapnik
  • 强力优化Rancher k8s中国区的使用体验
  • 如何胜任知名企业的商业数据分析师?
  • 深入 Nginx 之配置篇
  • 找一份好的前端工作,起点很重要
  • 正则表达式小结
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​水经微图Web1.5.0版即将上线
  • # C++之functional库用法整理
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (16)Reactor的测试——响应式Spring的道法术器
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)Linux Shell编程——输入输出重定向
  • (新)网络工程师考点串讲与真题详解