【问题标题】:Deserialize data from websocket response反序列化来自 websocket 响应的数据
【发布时间】:2019-10-02 05:29:34
【问题描述】:

我正在尝试使用包 msgpacket 反序列化 WebSocket 响应。

尝试反序列化数据包响应时出现错误:

未捕获的错误:无效参数:要反序列化的字节数组为空。

这是一个基本的 sn-p 显示这一点。我正在使用 echo.websocket.org 来测试它。它发回它得到的相同响应。

this.socket = new WebSocket('wss://echo.websocket.org');

        this.socket.onopen = () => {
            console.log('connected');

            var sourceData = {
                hello: 1,
                world: "test"
            };

            var data = msgpack.serialize(sourceData);
            this.socket.send(data.buffer);

            var after = msgpack.deserialize(data.buffer);
            console.log(after);
        }

        this.socket.onmessage = function (event) {
            var data = msgpack.deserialize(new Uint8Array(event.data));
            console.log(data);
        };
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script src="https://raw.githack.com/ygoe/msgpack.js/master/msgpack.min.js"></script>
</body>

</html>

我只是在收到 WebSocket 响应后尝试检索数据。

【问题讨论】:

    标签: javascript serialization websocket msgpack


    【解决方案1】:

    我能够解决问题。

    我发现我需要将 blob 转换为数组缓冲区

    这是有效的

    var blob = event.data;
    var arrayBuffer = null;
    
    arrayBuffer = await new Response(blob).arrayBuffer();
    
    var data = msgpack.deserialize(arrayBuffer);
    console.log(data);
    

    在这里找到:https://stackoverflow.com/a/55204517/10997917

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多