正规专业的网站建设公,点单小程序 微信,江南网盟-专注中小企业网站建设服务,wordpress录入表单写数据库出现原因#xff0c;
首先web端与服务端进行websocket连接#xff0c;服务端给设备下发指令#xff0c;设备给服务器上送文件#xff0c;然后服务端通过websocket给web端上送#xff0c;但是发现终端上送的小文件通过websocket给web端上送#xff0c;但是大文件会导致we…出现原因
首先web端与服务端进行websocket连接服务端给设备下发指令设备给服务器上送文件然后服务端通过websocket给web端上送但是发现终端上送的小文件通过websocket给web端上送但是大文件会导致websocket断开无法上送。
解决方案
解决方案1
对大文件而言 默认websocket上送的文件大小是8kb netty默认是64kb 网上相关的资料也少得很说是修改什么配置本人测试完全没什么毛用。
本人处理方案是通过code状态 根据状态
服务端websocket上送消息中添加code字段标识此条消息处理完毕还是需要有其他操作。 比如code200表示处理完成code201表示需要进行后续处理。
后台对上送的文件进行大小进行判断如果文件大于64000 表示文件大于8kb 返回code202 tmpRedisFileUuid… 将文件内容存在redis中并设置过期时间防止垃圾数据长时间存储占用内存问题。 前端根据code202使用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));}如果此方案对你有用欢迎点赞收藏后续有更多问题私信探讨