websocket上传大文件导致连接端开,上送失败解决方案

出现原因,

首先web端与服务端进行websocket连接,服务端给设备下发指令,设备给服务器上送文件,然后服务端通过websocket给web端上送,但是发现终端上送的小文件通过websocket给web端上送,但是大文件会导致websocket断开,无法上送。

解决方案

解决方案1

对大文件而言 默认websocket上送的文件大小是8kb netty默认是64kb 网上相关的资料也少得很,说是修改什么配置,本人测试完全没什么毛用。

本人处理方案是通过code状态 根据状态

服务端websocket上送消息中添加code字段,标识此条消息处理完毕还是需要有其他操作。
比如,code=200表示处理完成,code=201表示需要进行后续处理。

后台对上送的文件进行大小进行判断,如果文件大于64000 表示文件大于8kb
返回code=202 tmpRedisFileUuid=… 将文件内容存在redis中,并设置过期时间,防止垃圾数据长时间存储占用内存问题。
前端根据code=202使用http接口获取redis中的内容。就可以解决此问题。

解决方案2

对大文件分片处理,如果文件内容过大,将文件拆分为很多小片上送,上送完成之后,给前端一个,前端判断如果状态为202就使用一个变量接收每次上送的内容,并将内容拼接,直到上送的code是一个正确的,将完整内容复制给指定变量。
简单核心demo

 InputStream inputStream = file.getInputStream();
                    long fileSize = file.getSize();
                    long tempSize = 0;
                    if (fileSize > 2048) {
                        byte[] bytes = new byte[2048];
                        int read = inputStream.read(bytes);
                        tempSize = fileSize - 2048;
                        while (read != -1) {
                            String UTF_8 = new String(bytes, StandardCharsets.UTF_8);
                            log.info("------{}", UTF_8);
                            msg.setText(new String(bytes, StandardCharsets.UTF_8));
                            session.getBasicRemote().sendText(JSON.toJSONString(msg, true));
                            if (tempSize < 2048) {
                                tempSize = tempSize - 2048;
                                bytes = new byte[(int) tempSize];
                            }
                            read = inputStream.read(bytes);
                            tempSize = tempSize - 2048;
                        }
                    } else {
                        session.getBasicRemote().sendText(JSON.toJSONString(msg, true));
                    }

如果此方案对你有用,欢迎点赞收藏,后续有更多问题,私信探讨

相关推荐

  1. 文件

    2024-03-26 10:18:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 10:18:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 10:18:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 10:18:03       87 阅读
  4. Python语言-面向对象

    2024-03-26 10:18:03       96 阅读

热门阅读

  1. 在Cmakelist指令中,aux_source_directory 和 set 的区别

    2024-03-26 10:18:03       36 阅读
  2. ARM day8

    2024-03-26 10:18:03       31 阅读
  3. Linux配置elasticsearch开机自启

    2024-03-26 10:18:03       38 阅读
  4. 「Linux系列」Shell 函数详解

    2024-03-26 10:18:03       46 阅读
  5. android卡顿流程分析总结

    2024-03-26 10:18:03       45 阅读
  6. gstreamer udp rtp发送本地视频文件

    2024-03-26 10:18:03       39 阅读
  7. 4A架构:企业数字化转型的核心引擎

    2024-03-26 10:18:03       40 阅读
  8. vue2项目关联el-table和el-pagination

    2024-03-26 10:18:03       44 阅读
  9. 服务器为互联网发送数据出现丢包情况

    2024-03-26 10:18:03       47 阅读
  10. 28.找出字符串中第一个匹配项的下标

    2024-03-26 10:18:03       40 阅读