Прочитать содержимое Blob в сообщении Javascript websocket - PullRequest
0 голосов
/ 09 июня 2019

Я пишу клиентские серверы на основе WebSocket.

Я хочу отправить необработанные двоичные данные, которые затем декодируются клиентом.

Моя проблема двоякая:

  • в то время как манипуляции с двоичными данными в c ++ (язык, на котором я пишу серверы), просты, кажетсятрудно в Javascript.

  • Я обнаружил, что вы можете использовать ArrayBuffer s и UInt8Array s для выполнения большинства манипуляций, и это прекрасно работает для отправки сообщений.

  • Моя проблема в том, что когда я пытаюсь получить сообщения, если я объявляю сообщение двоичным на стороне сервера, оно отображается как Blob на клиенте.Я попытался преобразовать BLOB-объект в ArrayBuffer следующим образом:

ws.onmessage = function(evt) {
    var data = null;
    data = await new Response(evt.data).arrayBuffer();
}

Но это дает мне ошибку:

SyntaxError: await is only valid in async functions and async generators

Кажется, что этот метод является асинхронным, и, хотя я уверен, что я мог бы сделать это таким образом, в действительности он не кажется таким уж хорошим.

Я понял, что при отправке данных в виде текста evt.data отображается в виде строки, что заставляет меня поверить, что я могу использовать формат JSON для пакетов вместо двоичного.

Я действительно не хочу использовать JSON, хотя некоторые пакеты будут заполнены большим количеством информации, и я боюсь, что это добавит ненужный раздув.

Я думаю, что я действительно хочу, чтобы иметь возможность читать evt.data как ArrayBuffer, потому что кажется, что это будет наиболее эффективным.

1 Ответ

1 голос
/ 09 июня 2019

Используйте метод обещания then

new Response(evt.data).arrayBuffer().then(buffer=> {
//here you have the buffer
})

then arrayBuffer

Примечание: ожидание можно использовать внутри функций, объявленных с помощьюключевое слово async.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...