前端js解析websocket推送的gzip压缩json的Blob数据

主要依赖插件pako https://www.npmjs.com/package/pako

1、安装

bash 复制代码
npm install pako

2、使用, pako.inflate(reader.result, {to: "string"}) 解压后的string 对象,需要JSON.parse转成json

javascript 复制代码
  this.ws.onmessage = (evt) => {
        console.log("websocket推送=====",evt.data instanceof Blob)
        var messageData = evt.data;
        try {
// S 解压主要代码
          if(evt.data instanceof Blob){
              let reader = new FileReader();
              reader.readAsArrayBuffer(evt.data, "utf-8");
              reader.onload =() =>{
                // 对数据进行解压
                messageData = pako.inflate(reader.result, {to: "string"})
               console.log("解析压缩",messageData)
              }
          }
// E 解压主要代码

        } catch (error) {
          console.log("推送报错-blob",error)
        }



....

3、使用发现解析压缩会存在异步,导致解压未完成后续代码执行会报错,优化

javascript 复制代码
// 解析websocket推送的gzip blob数据to json
const pakoUngzipToJson = (messageData) => {
  return new Promise((resolve, reject) => {
    try {
      let reader = new FileReader();
      reader.readAsArrayBuffer(messageData, "utf-8");
      reader.onload = () => {
        // 对数据进行解压
        let ungzipData = pako.inflate(reader.result, { to: "string" });
        resolve(ungzipData);
      };
    } catch (error) {
      console.log("推送解析报错-blob", error);
      reject(error);
    }
  });
};


//使用

 receive: async (message) => {
    var messageData = message.data;
    if(messageData instanceof Blob){
      console.time("解析数据gzip-web")
      messageData = await pakoUngzipToJson(messageData)
      console.timeEnd("解析数据gzip-web")
    }

    var params = JSON.parse(messageData);

......
相关推荐
愤怒的山羊5 小时前
jetcache List 缓存, json 序列化 泛型解析成了 JsonObject 处理
缓存·json·list
2***d8859 小时前
使用 MySQL 从 JSON 字符串提取数据
mysql·oracle·json
TDengine (老段)1 天前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
wow_DG1 天前
【Python✨】VS Code 秒开 Python 类型检查:一招 mypy + settings.json 让你的 Bug 原地现形!
python·json·bug
会篮球的程序猿2 天前
html+canvas+thikphp 可视化工具拖拽、编辑生成JSON,渲染成海报图片 完全自定义,支持选择,文字背景色
前端·html·json
倚肆2 天前
Hutool-json 库完整指南
java·json
q***23923 天前
MySQL JSON数据类型全解析(JSON datatype and functions)
android·mysql·json
i_am_a_div_日积月累_4 天前
JSON数据转Excel
json·excel·css3
www_stdio5 天前
用 localStorage 打造本地待办清单:一个轻量级的前端实践
javascript·css·json
Jonathan Star6 天前
JSON-RPC 2.0 详解
qt·rpc·json