请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

cmq7fyaa
  • -2
新手上路,请多包涵

请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,然后我使用pako.inflate() 返回的还是一样的数据

    let socket = new WebSocket("wss://api-aws.huobi.pro/ws");
            
            socket.onopen = function(e) {
                alert(" 连接已建立");
                var data = {
                    "sub": "market.btcusdt.ticker"
                }
                socket.send('"sub": "market.btcusdt.ticker"');
                console.log(data)
            };

            const pako = require('pako');  //引入
            socket.onmessage = function(event) {
                console.log(`接收到数据: ${event.data}`);
                // console.log(event)

                if (event.data instanceof Blob) {
                    let result = '';
                    let reader = new FileReader();
                    console.log( reader)   //这里面的result打印出是 "\u001f‹\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000-ÊK
                    //FileReader:从Blob对象中读取数据
                    reader.onload = function() {
                        result = JSON.parse(pako.inflate(reader.result, {
                            to: 'string'
                        }));
                        // console.log(result)
                        //pako.inflate()对数据进行解压,得到正常的json对象
                        if (result.ping) {
                            socket.send(JSON.stringify({
                                pong: result.ping
                            }));
                            //响应服务器,避免断开连接
                        }
                    }
                     reader.readAsBinaryString(event.data);
                    //将返回的数据解析为字符串格式  这里打印上面这个没有反应

                }
            };

websocket他请求返回的原样子
WeChat845e9d52458ea461129f98ab87201060.png

数据格式 这是打印reader的数据WeChat340ef85f7dd55a72aa1d693e40413c1d.png

下面这个是打印出来的event的数据 WeChat997122ab524a5f82e189cfcf1aaedb06.png

请教一下 这是为什么 这个方法我也是网上百度到的 说要这么解决 但是我解决出来 数据还是没有变成字符串

补充的::::::: 打印 reader.result
我如果下面是使用eader.readAsArrayBuffer(event.data);的话 他就是这种格式
WeChatde6f7b4c3d381533d1df67df016ea29b.png

如是使用eader.readAsArrayBuffer(event.data);的话 他就是这种格式

WeChatc9bbd6a85dfe25e6620ab45ea37753eb.png

reader.result------arraybuffer
WeChatd281c16bee33a16486947f21fa29f5cb.png

回复
阅读 371
1 个回答

感觉是调用错函数了,你调用的是 reader.readAsArrayBuffer() 吗?试试:

reader.readAsArrayBuffer(event.data);
reader.onload = function() {
    result = JSON.parse(pako.inflate(reader.result, {
        to: 'string'
    }));
宣传栏