0

websocket返回数据是gzip格式,请问怎么解压缩?

function ws(url){

var ws = new WebSocket(url);
ws.onopen = function(evt){
    console.log(evt);
};
ws.onmessage = function(evt){
    console.log(evt);                
};
ws.onerror = function(evt){
    console.log(evt);
}

}
ws('wss://api.huobi.br.com/market/tickers');

打印出来的evt是这样的

clipboard.png

data是一个Blob对象
在网上查了资料说使用pakojs中的pako.inflate()方法可以解压缩,但我使用后报错:
Uncaught unknown compression method
//未知的压缩方法

所以不知道怎么解压了?

2018-08-20 提问

查看全部 3 个回答

3

感谢楼上提供思路,我请求返回的数据是一个Blob对象,存储的是二进制数据。
所以需要先从Blob对象中提取数据,然后再用pako.inflate()方法进行解压

具体什么是Blob对象,请看这里链接描述

具体代码如下:
ws.onmessage = function(evt){

if(evt.data instanceof Blob){
    let result = '';
    let reader = new FileReader();
    //FileReader:从Blob对象中读取数据
    reader.onload = function() {
        result = JSON.parse(pako.inflate(reader.result,{to:'string'}));
       //pako.inflate()对数据进行解压,得到正常的json对象
        if(result.ping){
            ws.send(JSON.stringify({pong:result.ping}));
            //响应服务器,避免断开连接
         }
     }
     reader.readAsBinaryString(evt.data);
     //将返回的数据解析为字符串格式
 }

};

推荐答案

0

已采纳

这个不是 gzip哦,所以不存在解压。

可以 这么用


var reader = new FileReader();
reader.onload = function() {
    alert(reader.result);
}
reader.readAsText(evt);

推广链接