websocket大量信息传输的优化---使用文本压缩

背景:
后端传输给我大量的geojson数据,造成卡顿。大的时候为500w+字节数
优化方向:后端将JSON转化为二进制文件并压缩然后发给前端。
前端如何处理:

        //定义websocket
        const socket = new WebSocket('ws://192.168.2.206:8002/getModelData?pushType=realtime&displayType=2D');
        socket.binaryType = 'arraybuffer' // 设置消息类型为二进制
        socket.addEventListener('message', event => {
            const arrayBuffer = event.data;
            const inflate = new pako.Inflate({ to: 'string' });
            inflate.push(arrayBuffer);
            if (inflate.err) {
                console.error(inflate.msg);
                return;
            }
            const jsonString = inflate.result;
            const data = JSON.parse(jsonString);
            map.getSource('route').setData(data);
        });

用到的依赖为pako.js库地址为在线cdn地址
也可以使用npm下载 npm install pako
然后使用

import pako from "pako";
 //arrayBuffer为websocket传过来的文件
 if (arrayBuffer) {
        const inflate = new pako.Inflate({ to: "string" });
        inflate.push(arrayBuffer);
        if (inflate.err) {
          console.error(inflate.msg);
          return;
        }
        const jsonString = inflate.result;
        const data = JSON.parse(jsonString);
        //data为转化后的json
 }

在这里插入图片描述

需要注意 定义websocket实例后一定要加上socket.binaryType = 'arraybuffer' 这行代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket协议是一种基于TCP的通信协议,可以实现实时双向通信。通过WebSocket协议可以传输不同类型的数据,包括文本、二进制数据、图片等。 传输图片时,可以将图片以二进制数据的形式传输。以下是一个基本的示例代码: ``` // 建立WebSocket连接 var socket = new WebSocket('ws://localhost:8080'); // 发送图片 var img = document.getElementById('image'); var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0, img.width, img.height); var dataURL = canvas.toDataURL('image/jpeg'); socket.send(dataURL); ``` 在服务端接收到图片数据后,可以将其转换为二进制数据,并保存为图片文件。以下是一个基本的示例代码: ``` // 接收数据 socket.onmessage = function(event) { var dataURL = event.data; var binary = atob(dataURL.split(',')[1]); var array = new Uint8Array(binary.length); for (var i = 0; i < binary.length; i++) { array[i] = binary.charCodeAt(i); } var blob = new Blob([array], {type: 'image/jpeg'}); // 保存为图片文件 var fs = require('fs'); fs.writeFile('image.jpg', blob, function(err) { if (err) throw err; console.log('Saved!'); }); }; ``` 需要注意的是,WebSocket传输数据时需要考虑数据大小的限制,尤其是在传输大型图片时。可以将图片切分成多个数据包进行传输,并在服务端进行组装。同时,为了提高传输效率,可以使用WebSocket压缩扩展进行压缩

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值