当前位置:   article > 正文

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

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/311560
推荐阅读
相关标签
  

闽ICP备14008679号